我想创建自己的策略。
我有client_id
,client_secret
和相关元数据。我也知道执行流程。所以我想创建自己的策略并添加我自定义的身份验证逻辑。
我看过passport-strategy,但我不知道如何实现我的自定义策略。有人能解释一下吗?
我想创建自己的策略。
我有client_id
,client_secret
和相关元数据。我也知道执行流程。所以我想创建自己的策略并添加我自定义的身份验证逻辑。
我看过passport-strategy,但我不知道如何实现我的自定义策略。有人能解释一下吗?
你有两个选择:
如果你有自定义身份验证逻辑,那么你不需要创建自己的策略...你可以使用passport-custom策略来构建这个逻辑。根据文档:
自定义身份验证策略通过您选择的自定义逻辑对用户进行身份验证
除非你想要实际构建一个你想要分发的策略(例如:OpenID的实现或类似的东西),否则我认为没有必要实现自己的策略。
然而,实现自己的策略就是实现passport-strategy抽象类。我建议查看Github页面而不是npm页面,因为它有关于如何启动和运行的更多信息。基本上,拥有自己的策略需要遵循以下步骤:
最后,你需要将它打包成一个npm模块,一旦你把所有东西都准备好了,你就可以在你的Node.js项目中要求你自己的策略。
正如我所说,我认为你需要有一个很好的理由去选择自己的策略。我建议尝试一下passport-custom。
我发现使用passport-custom在typescript项目中非常令人沮丧。实际上,创建新策略非常容易,你只需要实现或扩展基本的passport策略即可,因为唯一必需的函数是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');
}
}