Passport-js如何创建自定义策略

Sam*_*Sam 15 javascript authentication node.js oauth-2.0 passport.js

我希望创建自己的策略.

我有client_id,client_secret和相关的元数据.我也知道执行的流程.所以我想创建自己的策略并添加我的自定义逻辑进行身份验证.

我查看了护照策略,但我不了解如何实施自己的策略.有人能解释一下吗?

jav*_*ezg 16

你有两个选择:

如果你有一个自定义逻辑用于身份验证,你真的不需要创建自己的策略...你可以使用passport-custom策略,它允许你构建这个逻辑.根据文件:

自定义身份验证策略通过您选择的自定义逻辑对用户进行身份验

除非您想要实际构建一个您想要分发的策略(例如:OpenID的实现或类似的东西),否则我没有看到实施您自己的策略的重点.

但是,实施自己的策略包括实施护照策略抽象类.我建议查看Github页面而不是npm页面,因为它有关于如何启动和运行的更多信息.基本上,遵循自己的策略的步骤是:

  1. 子类战略
  2. 通过在原型上定义authenticate()方法来实现身份验证(这里您将拥有自定义逻辑).
  3. 调用其中一个增强方法(.success,.fail,.pass,.redirect或.error)

最后,您需要将其打包为npm模块,一旦完成所有操作,您就可以在Node.js项目中使用自己的策略.

正如我所说,我认为你需要有充分的理由去实施自己的策略.我试试护照习俗.


amd*_*dan 5

我发现它非常令人沮丧,使用护照定制,在打字稿项目中,实际上创建新策略非常容易,您需要做的就是实现或扩展基本护照策略,因为唯一的强制功能是authenticate,这是策略检查的切入点,剩下的就看你的想象了。

import { Request } from 'express';
import passport from 'passport';

export class CustomStrategy extends passport.Strategy {
  name?: string;

  authenticate(
    this: passport.StrategyCreated<this, this & passport.StrategyCreatedStatic>,
    _req: Request,
    _options?: any,
  ) {
    // this.success({user: Express.User}, info?: object): void;
    this.success({ id: 1 }, { info: 'userdata' });

    //// *** Other available inherited methods
    //// * fail(challenge?: {message?: string, [key: string]: any } | string | number, status?: number): void;
    // this.fail('not your day body'); // default statusCode 401
    // this.fail('not your day body', 403); // change for statusCode 403

    //// * redirect(url: string, status?: number): void;
    // this.redirect('https://url');

    //// * pass() // ignores check
    // this.pass();

    //// * error(err: any)
    // this.error('error of some kind');
  }
}
Run Code Online (Sandbox Code Playgroud)