Angularjs passport.js中的身份验证,与angular js一起使用
我通过下面的链接了解了passport.js中authenticate方法的用法 在我的项目中,我有以下代码:Angularjs passport.js中的身份验证,与angular js一起使用,angularjs,angularjs-scope,angularjs-routing,Angularjs,Angularjs Scope,Angularjs Routing,我通过下面的链接了解了passport.js中authenticate方法的用法 在我的项目中,我有以下代码: app.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { console.log(err); return next(err) } if (!use
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { console.log(err); return next(err) }
if (!user) {
return res.json(400, info);
}
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.json(200, {user_id: user._id, url:"/user/home"});
});
})(req, res, next);
});
我在另一个文件中调用了/login url,如下所示
$http.post('/login', $scope.user).
success(function(data, status, headers, config) {
$window.location.href= data.url ? data.url : '/';
$scope.view.loading = false;
}).error(function(data, status, headers, config) {
console.log(data);
$scope.view.loading = false;
$scope.view.submitted = true;
$scope.view.serverError=data.message ? data.message : "Server Error!";
});
我的疑问是,passport.authenticate为什么知道用户凭据。
在调用http.post时,我们还发送$scope.user。但这只是“数据”。为什么passport.authenticate知道对象“user”?不能100%确定您的确切要求,但我会试一试 您负责告知Passport用户名/密码对是否匹配,然后向Passport提供与给定用户名(或电子邮件或其他内容)对应的用户对象。这是在:
passport.use(newlocalstrategy(…)代码>指定此逻辑的位置。(您可以在官方网站上找到有关如何执行此操作的示例代码。)Passport然后在会话中序列化此用户对象,同样按照您指定的逻辑:
passport.serializeUser(function (user, done) {
// Only store the user id in the session
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
// Find the user with the given id
User.find(id).done(function (err, user) {
done(err, user);
});
});
passport在调用函数中传递给您的user
对象是passport.authenticate
与您根据本地策略提供给passport的user
对象完全相同
下面是事件的细目:
您将用户名/密码(或电子邮件/密码)对发布到/login
请求由Express接收并路由到相应的处理程序
执行passport.authenticate(…)
,方法是向它提供处理程序提供的req
、res
和next
对象
Passport执行您在Passport中指定的登录逻辑。使用(new LocalStrategy(…)
。如果逻辑处理的结果是给它一个有效的user
对象,则passport会将该对象传递给回调函数,以便您可以返回用户的详细信息(或其他信息)