博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs认证模块passport.js参数解释
阅读量:6000 次
发布时间:2019-06-20

本文共 3163 字,大约阅读时间需要 10 分钟。

hot3.png

基本用法可参考以下文章:

passport.js学习笔记

Express结合Passport实现登陆认证

官方文档

关于new LocalStrategy

# 方法一LocalStrategy(  # 可以这样理解,前2个参数username, password实际是php里的  # $_POST['username']和$_POST['password']  # 如果通过表单传过来的参数不为默认的username, password,则可使用方法二  function verify(username, password, done) {    if ( username == 'admin' && password == 'admin-password' ) {      var user = {        username: 'admin'      };      return done(null, user);    }        return done(null, false, {message: '登录失败'});  });# 方法二LocalStrategy(  # 参数username, password实际是php里的 $_POST['email'] 和 $_POST['pass']  {    usernameField: 'email',    passwordField: 'pass'  },  function verify(username, password, done) {    if ( username == 'admin' && password == 'admin-password' ) {      var user = {        username: 'admin'      };      return done(null, user);    }    return done(null, false, {message: '登录失败'});  });# 方法三# 有可能验证登录时还需要检查验证码是否输正确,即需要其他的字段一起验证# 那么可设置参数passReqToCallback为true,此时回调函数verify的第一个参数为req# 然后通过req.body.XXX去获取其他的数据来一同验证LocalStrategy(  {    passReqToCallback: true  },  function verify(req, username, password, done) {    if ( req.body.validCode == '1234' && username == 'admin' && password == 'admin-password' ) {      var user = {        username: 'admin'      };      return done(null, user);    }    return done(null, false, {message: '登录失败'});  });

关于上面LocalStrategy里verify函数的最后一个参数done,官方称之为verify callback

官方文档:

# 源码里关于done的定义,一共3个参数# err:  只有在发生严重错误时,才传入此参数,例如:数据库执行错误等,否则传入false# user: 只有在验证登录通过时,才传入user变量,否则传入false# info: 无论验证正确或者错误,都可以写入message,在其他页面读取#       info的格式一定是 {message: 'ERROR MESSAGE'} 对象的属性必须是messagedone(err, user, info)# 发生严重的错误时done(err)# 验证登录成功时user = {id: 15, username: 'zhangsan', email: 'zhang.san@example.com'};done(null, user)# 验证失败时done(null, false, {message: '用户名密码错误,请重试'})

关于验证方法 passport.authenticate

app.post('/login', passport.authenticate('local', options));

官方文档:

options参数解释如下:

session: 默认true,是否将用户的登录状态记录到session,一般无需修改此选项,如果设置为false,那么一旦页面跳转,浏览器无法得知你的登录状态,这个选项应该是用于RESTful API之类的程序用的,因为这类程序每次请求都会需要验证

successRedirect: 如果登录成功那么就会跳转到指定页面,如果没指定,相当于执行了next()

failureRedirect:如果登录失败,则会跳转到指定页面,如果没有指定,页面会抛出一个401 Unauthorized错误

successReturnToOrRedirect:

如果为空,此选项不生效,如果指定了url,那么当登录成功以后
1. 首先会检查req.session.returnTo是否有值,如果存在,则跳转到这里
2. 如果req.session.returnTo为空,才跳转到指定的url
3. 无论这个参数是什么值,只要存在,页面就一定会跳转
注意:此方法会优先于successRedirect执行,根据第三点可知道,如果这个参数设置了值,那么再设置successRedirect就没有任何意义了。
使用场景:比如用户访问到一个没有权限的页面,你需要将他带回登录页面,待登录成功以后,再回到此页面,就可以将returnTo设置到session里。是一个很好的模块。

successFlash/failureFlash

1. 如果不设置此参数或者为false,那么在其他页面无法获取verify callback方法info参数传入的message信息
2. 如果设置为true,那么在其他页面调用 req.flash() 就可以获取到verify callback方法info里的message信息(使用req.flash需要安装模块connect-flash)
3. 如果设置为字符串,那么在其他页面调用 req.flash() 时,就得到这个字符串,而非info

successMessage/failureMessage

1. 同上面的第一点
2. 如果设置为true,那么verify callback方法info里的message信息会被写入到req.session.message而非通过 req.flash() 获取
3. 如果设置为字符串,那么在其他页面,也是通过 req.session.message 获取该字符串信息
4. 也就是说successFlash是通过 req.flash() 获取数据,而succcessMessage则是通过 req.session.messag 获取

assignProperty: 一般无需指定此参数,但是如果你需要自己定义登录行为的话,则可以传入这个值,然后在next方法里调用 req.login 来执行登录,并且user的信息会被保存到 req[assignProperty] 里

转载于:https://my.oschina.net/u/924639/blog/551752

你可能感兴趣的文章
Git Feature分支
查看>>
scrollview和listview或者gridview的冲突
查看>>
Linux启动新进程的几种方法及比较
查看>>
OpenStack容器网络项目Kuryr(libnetwork)
查看>>
CentOS 6.x minimal(最小化) 安装后后续相关
查看>>
对于无线网络经常掉线的问题
查看>>
【原创】我辞去了年收入50万的工作,去做在线教育的老师
查看>>
am broadcast -a
查看>>
我的友情链接
查看>>
SNS社交系统“ThinkSNS”授权及版本升级说明通知!
查看>>
【招募】golang小项目
查看>>
部署内网Docker Registry
查看>>
VIM 编辑器使用基础介绍
查看>>
Ubuntu12.04安装subversion1.8.x和subclipse1.10.x
查看>>
python实现汉诺塔
查看>>
centos7安装 jupyter
查看>>
MySQL高可用架构之MHA
查看>>
在使用Windows时防止电脑死机的技巧
查看>>
Druid Monitor监控JavaSE和JavaWeb
查看>>
voip工程项目介绍
查看>>