关于passport-local本地身份验证策略使用说明

关于passport-local使用问题

本地身份验证策略: 使用用户名和密码进行身份验证。

默认传递字段: username / password , 要想更改必须在 options 中配置

安装

passport-local 依赖于 passport 必须都安装

npm install --save passport 
npm install --save passport-local

基本语法

passport.use(new LocalStrategy([options,]callback))

参数

LocalStrategy() 一个参数是 options(可选), 一个是回调函数 callback(必填)

options
usernameField 设置 name 字段, 默认 username
passwordField 设置 password 字段, 默认 password
passReqToCallback 设置 request 是否回调函数的第一个参数, 默认 false (不是第一个参数)
session 设置 是否支持 session 会话, 保持持久化登录状态, 默认 true

callback
done() 第一个参数返回错误信息或者null, 第二个参数返回 用户对象或者其他对象或者false

passport.use(new LocalStrategy(
  {
    usernameField: 'username',
    passwordField: 'password',
    passReqToCallback: true,
    session: false
  },
  function([req,]username, password, done) {
    User.findOne({ username: username, password: password }, function (err, user) {
        done(err, user);
    });
  }
));

在 nestjs 应用

@Injectable()
export class LocalStrategy extends PassportStrategy( Strategy ) {
  constructor ( private readonly authService: AuthService ) {
    // passport-local 用例中,没有配置选项,因此我们的构造函数只是调用 super() ,没有 options 对象。
    /**
      usernameField 设置 name 字段, 默认 username
      passwordField 设置 password 字段, 默认 password
      passReqToCallback 设置 request 是否回调函数的第一个参数, 默认 true (是第一个参数)
      session 设置 是否支持 session 会话, 保持持久化登录状态, 默认 true
     */
    super( {
      usernameField: 'firstName'
    } );
  }

  async validate ( firstName: string, password: string ): Promise<any> {
    const user = await this.authService.validateUser( firstName, password );
    if ( !user ) {
      throw new UnauthorizedException();
    }
    // 返回的值自动创建一个 user 对象,并将其作为 req.user 分配给请求对象
    return user;
  }
}

github

https://github.com/jaredhanson/passport
https://github.com/jaredhanson/passport-local

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了 义

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值