我对Angular很陌生,现在我只是想把所有的路由设置好,然后按我想的那样工作。
设置:当用户导航到某些页面(本例中为/settings
)时,应用程序应该检查是否有用户已经登录。如果有继续像往常一样。否则,用户应该进入登录页面(/login
)。
我想要的:在用户成功登录后,他们应该转到他们最初试图访问的页面(/settings
)
我的问题:有没有一种"Angular的方式"来记住用户试图去的地方?
相关代码:app.js
.when('/settings', {
templateUrl: '/views/auth/settings.html',
controller: 'SettingsCtrl',
resolve: {
currentUser: function($q, $location, Auth) {
var deferred = $q.defer();
var noUser = function() {
//remember where the user was trying to go
$location.path("/login")
};
Auth.checkLogin(function() {
if (Auth.currentUser()) {
deferred.resolve(Auth.currentUser());
} else {
deferred.reject(noUser());
}
});
return deferred.promise;
}
}
})
login.js
$scope.submit = function() {
if(!$scope.logInForm.$invalid) {
Auth.login($scope.login, $scope.password, $scope.remember_me)
//go to the page the user was trying to get to
}
};
非常感谢John Lindquist的视频,让我走了这么远。
首先,您不希望将用户重定向到登录页面。
单页web应用程序的理想流程如下:
-
用户访问网站。的静态资产的网站回复
-
控制器(对于给定的路由)使用$http, $route或其他机制调用API(例如,通过GET到/API/v1/users/Profile,预先用登录用户帐户的详细信息填写Edit Profile表单)
-
如果/当客户端从API接收到401时,显示一个模式到
-
API调用成功(在这种情况下,用户可以查看预填写的Edit Profile表单)
你怎么能做到#3?答案是$http 响应拦截器。
用于全局错误处理、身份验证或任何类型的对接收到的响应进行同步或异步预处理希望能够拦截HTTP请求之前的响应它们被移交给启动它们的应用程序代码请求。响应拦截器利用承诺api来满足同步和异步预处理的需求。
http://docs.angularjs.org/api/ng。美元http
既然我们知道理想的用户体验应该是什么,我们该怎么做呢?
这里有一个例子:http://witoldsz.github.com/angular-http-auth/
该示例基于本文:
http://www.espeo.pl/2012/02/26/authentication-in-angularjs-application祝你好运和快乐的角!