gpt4 book ai didi

javascript - AngularJS - $rootScope.currentUser 未从个人资料页面转移到设置页面

转载 作者:行者123 更新时间:2023-11-29 15:38:35 25 4
gpt4 key购买 nike

我有一个包含 Angular/Express/Node/Passport 的站点,我正试图将它们放在一起。我正在设置 Angular 来观察 $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 不可用 -因为当 currentUser 被监视时(上图) - 它执行 Auth.currentUser() 函数 - 并被拒绝,因为 $rootScope.currentUser 是空。

这里还有一些可能相关的代码:

Auth.js(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);
});
}
};
})

Auth.currentUser() 之后它执行一个 get 请求,从 express 端执行这个函数:

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.currentUser() 在某处失败了。任何帮助将不胜感激 - 谢谢(看看 $cookieStore 在 Auth.js 中的使用方式 - 我不确定它是如何工作的)。

最佳答案

你的Auth.currentUser()有点奇怪,试着把它改成这样的来使用User服务

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

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

我还建议你查看lib目录下的middleware.js文件,看看保存cookie是否有问题,比如你想把所有的用户对象都放到里面而不仅仅是 userInfo。在这种情况下,您将不得不稍微修改您的 session 函数以输出整个用户。

关于javascript - AngularJS - $rootScope.currentUser 未从个人资料页面转移到设置页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com