AngularJS - $ rootScope.currentUser未从配置文件页面传输到设置页面

时间:2014-06-01 20:03:06

标签: javascript angularjs session authentication get

我正在尝试将Angular / Express / Node / Passport放在一起。我正在设置角度来观看$rootScope.currentUser变量,这里有一些代码:

app.run(function ($rootScope, $location, Auth) {

    //watching the value of the currentUser variable.
    $rootScope.$watch('currentUser', function(currentUser) {
      // if no currentUser and on a page that requires authorization then try to update it
      // will trigger 401s if user does not have a valid session
      if (!currentUser && (['/', '/login', '/logout', '/signup'].indexOf($location.path()) == -1 )) {
        Auth.currentUser();
      }
    });

    // On catching 401 errors, redirect to the login page.
    $rootScope.$on('event:auth-loginRequired', function() {
      //console.log(currentUser);
      $location.path('/login');
      return false;
    });
  });

使用控制台消息,我已经确定当我从配置文件页面(登录后)到设置页面(您可以更改密码)时$rootScope.currentUser不可用 - 因为当{{1观察(上图) - 它执行currentUser函数 - 并被拒绝,因为Auth.currentUser()为空。

以下是一些可能相关的代码:

Auth.js(其中$rootScope.currentUser

Auth.currentUser()

'use strict'; angular.module('groundup') .factory('Auth', function Auth($location, $rootScope, Session, User, $cookieStore) { $rootScope.currentUser = $cookieStore.get('user') || null; $cookieStore.remove('user'); $rootScope.currentUserSignedIn; return { login: function(provider, user, callback) { var cb = callback || angular.noop; //console.log(user); Session.save({ //provider: provider, username: user.username, password: user.password, //rememberMe: user.rememberMe }, function(user) { console.log(user); $rootScope.currentUser = user; $rootScope.currentUserSignedIn = true; console.log($rootScope.currentUser); $location.path('/profile'); return cb(); }, function(err) { console.log(err); return cb(err.data); }); }, logout: function(callback) { var cb = callback || angular.noop; Session.delete(function(res) { $rootScope.currentUser = null; $rootScope.currentUserSignedIn = false; console.log($rootScope.currentUser); return cb(); }, function(err) { return cb(err.data); }); }, createUser: function(userinfo, callback) { var cb = callback || angular.noop; console.log(userinfo); User.save(userinfo, function(user) { $rootScope.currentUser = user; $rootScope.currentUserSignedIn = true; console.log($rootScope.currentUser); $location.path('/profile'); return cb(); } ); }, currentUser: function() { Session.get(function(user) { console.log(user); $rootScope.currentUser = user; }); }, changePassword: function(oldPassword, newPassword, callback) { var cb = callback || angular.noop; return User.update({ oldPassword: oldPassword, newPassword: newPassword }, function(user) { return cb(user); $location.path('/'); }, function(err) { return cb(err); }).$promise; }, removeUser: function(email, password, callback) { var cb = callback || angular.noop; User.delete({ email: email, password: password }, function(user) { console.log(user + 'removed'); return cb(); }, function(err) { return cb(err.data); }); } }; }) 之后,它执行get请求,从快递方执行此功能:

Auth.currentUser()

问题在于重定向到exports.session = function (req, res) { console.log(req.user.user_info + " in session function"); res.json(req.user.user_info); }; 页面 - 因为正在观看/settings,它会自动重定向到$rootScope.currentUser,因为/login在某处失败了。任何帮助将不胜感激 - 谢谢(看看如何在Auth.js中使用$ cookieStore - 我不确定这是如何工作的)。

1 个答案:

答案 0 :(得分:1)

您的Auth.currentUser()有些奇怪,请尝试将其更改为使用User服务

currentUser: function () {
    return User.get();
}

您的问题也可能来自cookie存储问题,Passport尝试将当前用户保存在其中但在某处失败(导致尝试访问未定义的var或其他内容)并在cookie中存储已损坏/空用户。 因此第一页正确加载,但当您的应用尝试访问Cookie时,它会中断。

我还建议你查看lib目录中的middleware.js文件,看看cookie保存是否没有问题,比如你想把所有的用户对象都放到它而不仅仅是{{ 1}}。在这种情况下,您将需要修改一点userInfo函数以输出整个用户。