检查用户是否在Node.js的后端进行了身份验证,并在Angular中使用ui-router提供页面

问题描述 投票:0回答:1

在我的特殊情况下,我找不到在线资源。

在后端,我在NodeJS中使用PassportJS对用户进行身份验证。

当用户请求index页面时,我希望他看到他的主页(类似于facebook.com将您带到您的个人供稿),或者如果他未经身份验证,则显示一个登录页面。

我希望Angular UI-Router来处理它,而不是服务器处理要发回的页面,因为我不想让用户感到被重定向。

也就是说,当用户请求页面时,我希望UI-Router处理他看到的页面。

有什么办法吗? 优选地,非常简单的方式。

angularjs authentication angular-ui-router passport.js
1个回答
1
投票

是的,您可以在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.
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.