gpt4 book ai didi

node.js - 如何将 Passport 与路由 Controller 结合起来?

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:47 27 4
gpt4 key购买 nike

我目前正在尝试将passport-ldap 和passport-jwt 实现到我的其余API 中。对于路由,我使用 pleerock/routing-controllers ,它有一种授权方式,但它适用于 bool 值,而 Passport 适用于我老实说不知道。我什至不确定是否可以将两者结合起来。

目前 AuthorizationChecker 返回 false,因为我不知道如何将 Passport.authenticate 转换为 bool 值。

useExpressServer(app, {
controllers: [UserController, IssueController, LoginController],
authorizationChecker: async (action: Action) => {
return false;
}
@Authorized()
@Get("/test")
test(@Res() response: Response){
response.send("Test done.")
}

如何使用 passport.authenticate() 进行路由控制授权?

最佳答案

是的,可以将 Passport 与路由 Controller 结合起来。

最简单的方法是在 Controller 类或路由方法之前使用 Passport 作为中间件和 @UseBefore 装饰器:

@JsonController()
@UseBefore(passport.authenticate('jwt'))
export class MyController { ... }

但是您可能想使用@Authorized() 装饰器。它有点复杂,但可以通过 authorizationChecker 配置来完成:

import express from 'express';
import { Action, useExpressServer } from 'routing-controllers';

const app = express();

useExpressServer(app, {
authorizationChecker: (action: Action) => new Promise<boolean>((resolve, reject) => {
passport.authenticate('jwt', (err, user) => {
if (err) {
return reject(err);
}
if (!user) {
return resolve(false);
}
action.request.user = user;
return resolve(true);
})(action.request, action.response, action.next);
}),
currentUserChecker: (action: Action) => action.request.user,
});

然后您将能够使用 @Authorized() 和 @CurrentUser 装饰器。

检查passport authenticaterouting-controllers auth features了解更多详情。

关于node.js - 如何将 Passport 与路由 Controller 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45711786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com