我目前正在尝试将passport-ldap和passport-jwt实施到我的其余API。对于路由我使用pleerock/routing-controllers,它有一种授权方式,但它适用于布尔和护照工作我真的不知道。我甚至不确定它是否可能将两者结合起来。
目前AuthorizationChecker返回false,因为我不知道如何将passport.authenticate变成布尔值。
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()
与路由控制授权一起使用?
答案 0 :(得分:0)
要使用authenticate()
,您必须将其用作中间件。以下是路由控制器link如何使用中间件。对于authenticationChecker
import * as jwt from 'jwt-simple';
currentUserChecker: async (action: Action) => {
const token = action.request.headers["authorization"];
console.log(token)
let key= jwt.decode(token, "Banana");
console.log(key)
let user = await mongoose.model("users").findOne({'key': key.key});
if (user != null && token != null) return user;
}
这是使用passport-jwt
进行jwt身份验证的设置答案 1 :(得分:0)
是的,可以将通行证与路由控制器结合使用。
最简单的方法是在控制器类或路由方法之前将护照作为带有@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 authenticate和routing-controllers auth features以获得更多详细信息。