i5ting / i5ting/wechat-dev-with-nodejs
关于passport使用的一点疑惑
- Dominant language
- JavaScript
- Stars
- 285
- Forks
- 81
- PR merge metrics
- No merged PRs in 30d
Description
首先看一点代码:
```
app.post('/login',
passport.authenticate('local',
{ successRedirect: '/',
failureRedirect: '/login',
failureFlash: true }),
function(req, res) {
// 验证成功则调用此回调函数
res.redirect('/users/' + req.user.username);
});
````
第三个回调函数有没有必要呢,因为上面的参数的意思是:
验证成功跳转到 “/”;
验证失败跳转到 “/login”;
所以不论成功或失败都不会有回调执行;
当然去掉其中一个条件,当满足去掉的条件时就会执行第三个参数 好像有点明白了;
### 第二个疑问 看代码:
```
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
```
这个就用有点晕了,对于这段代码的解释,网上有段说法如下:
> authenticate()方法有3个参数,
第一是name,即验证策略的名称,
第二个是options,包括下列属性:
session:Boolean。设置是否需要session,默认为true
successRedirect:String。设置当验证成功时的跳转链接
failureRedirect:String。设置当验证失败时的跳转链接
failureFlash:Boolean or String。设置为Boolean时,express-flash将调用use()里设置的message。设置为String时将直接调用这里的信息。
successFlash:Boolean or String。使用方法同上。
第三个参数是callback。 **注意如果使用了callback,那么验证之后建立session和发出响应都应该由这个callback来做,passport中间件之后不应该再有其他中间件或callback** 。
# 咦 !!!我好像明白了 但passport这个立即执行的方法,还真是让人看着不舒服呢;看来写wiki也能解惑啊
以上片段节选自 [passport教程](http://idlelife.org/archives/808)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.