sab*_*ari 2 angularjs angularjs-scope angularjs-routing
我从以下链接http://passportjs.org/guide/authenticate/了解到在passport.js中使用身份验证方法
在我的项目中,我有以下代码:
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);
});
Run Code Online (Sandbox Code Playgroud)
我在另一个文件中调用了/ 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!";
});
Run Code Online (Sandbox Code Playgroud)
我的疑问是,passport.authenticate如何知道用户凭据.在调用http.post时,我们也发送$ scope.user.但那只是'数据'.为什么passport.authenticate知道对象'用户'?
不是100%肯定你的确切要求,但我会试一试.
如果用户名/密码对匹配,您负责告诉Passport,然后向Passport提供与给定用户名(或电子邮件或其他)对应的用户对象.这可以在:passport.use(new LocalStrategy( ... ));
指定此逻辑的位置完成.(您可以在官方网站上找到有关如何执行此操作的示例代码.)然后,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);
});
});
Run Code Online (Sandbox Code Playgroud)
在user
该护照传递给你的回调函数对象passport.authenticate
是非常相同的user
,你给护照作为本地策略的结果对象.
所以这里是事件的细分:
passport.authenticate(...)
通过给它req
,res
以及next
从处理程序给你的对象.passport.use(new LocalStrategy(...))
.如果user
逻辑进程给出了有效对象,则passport会将此对象传递给回调函数,以便您可以返回用户(或其他)的详细信息. 归档时间: |
|
查看次数: |
3956 次 |
最近记录: |