0

所以我试图让本地身份验证与护照和 angular-ui 一起工作,但我想我自己很困惑。我相信本地注册和本地登录有效,因为重定向按预期工作。

我有一个小型 Auth 服务,我想注入并使用它来存储用户信息。它看起来像这样:

myApp.factory('Auth', function() {
  var user;

  return {
    setUser: function(aUser) {
      user = aUser;
    },
    isLoggedIn: function() {
      return (user) ? user : false;
    }
  }
});

我的路线如下所示:

    app.post('/login', function(req, res, next) {
      passport.authenticate('local-login', function(err, user, info) {
        if (err) {
          console.log(err);
          return next(err);
        }
        if (!user) {
          console.log(user);
          var param = 'There was an error with your login';
          return res.redirect('/#/login?valid=' + param);
        }
        req.logIn(user, function(err) {
          if (err) {
            console.log(err);
            return next(err);
          }
          //console.log(req);
          console.log(user);
          return res.redirect('/#/news');
        });
      })(req, res, next);
    });

我的状态如下所示:

myApp.config(function($stateProvider, $urlRouterProvider) {

  $urlRouterProvider.otherwise("/news");

  $stateProvider
    .state('news', {
      url: "/news",
      templateUrl: "templates/news.html",
      params: {
        message: null
      }

    })
    .state('people', {
      url: "/people",
      templateUrl: "templates/people.html",
      resolve: {
        authenticate: authenticate
      },
    })
    .state('login', {
      url: "/login",
      templateUrl: "templates/login.html"
    })
    .state('signup', {
      url: "/signup",
      templateUrl: "templates/signup.html"
    })
    .state('preLogin', {
      url: "/preLogin",
      templateUrl: "templates/preLogin.html"
    });

  function authenticate($q, Auth, $state, $timeout) {
    if (Auth.isLoggedIn()) {
      return $q.when()
    } else {
      $timeout(function() {
        $state.go('login')
      })
      return $q.reject()
    }
  }
});

我不知道如何或何时将用户信息存储在我的 Auth 服务中。我假设我需要在 loginCtrl 中执行此操作,但除了 URL 重定向之外,我不知道如何判断它何时成功登录。

任何帮助表示赞赏。

4

0 回答 0