在我的特殊情况下,我找不到在线资源。
在后端,我在NodeJS中使用PassportJS对用户进行身份验证。
当用户请求index
页面时,我希望他看到他的主页(类似于facebook.com将您带到您的个人供稿),或者如果他未经身份验证,则显示一个登录页面。
我希望Angular UI-Router来处理它,而不是服务器处理要发回的页面,因为我不想让用户感到被重定向。
也就是说,当用户请求页面时,我希望UI-Router处理他看到的页面。
有什么办法吗? 优选地,非常简单的方式。
是的,您可以在ui-router中使用resolve。
假设您有一个Auth服务(例如,我正在使用$ firebaseSimpleLogin),您可以在工厂定义您的身份。
.factory('Auth', function ($firebaseSimpleLogin, FIREBASE_URL, $rootScope, $firebase) {
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseSimpleLogin(ref);
var Auth = {
register: function (user) {
return auth.$createUser(user.email, user.password);
},
createProfile: function (user) {
var profile = {
username: user.username,
md5_hash: user.md5_hash
};
var profileRef = $firebase(ref.child('profile'));
return profileRef.$set(user.uid, profile);
},
login: function (user) {
return auth.$login('password', user);
},
logout: function () {
auth.$logout();
},
resolveUser: function() {
return auth.$getCurrentUser();
},
signedIn: function() {
return !!Auth.user.provider;
},
user: {}
};
$stateProvider
.state('TestPageCtrl', {
url: 'testpage',
templateUrl: 'test/testpage.html',
controller: 'AuthCtrl',
resolve: {
user: function(Auth) {
return Auth.resolveUser();
}
}
});
因此,现在使用该用户可以控制用户的访问。
.controller('TestPageCtrl', function ($scope, $state, Auth, user) {
if (user) {
$state.go('posts');
} else {
// redirect to a page saying that login first.
}
});