passport.js - 用户不可用 NestJS 护照策略(文档示例除外)
问题描述
我正在尝试实施护照策略(passport-headerapikey),我能够让它工作并且我可以保护我的路线。但是请求是空的,无法访问登录的用户?
import { HeaderAPIKeyStrategy } from "passport-headerapikey";
import { PassportStrategy } from "@nestjs/passport";
import { Injectable, NotFoundException } from "@nestjs/common";
import { CompanyService } from "../../companies/companies.service";
@Injectable()
export class ApiKeyStrategy extends PassportStrategy(HeaderAPIKeyStrategy, "api-key") {
constructor(private readonly companyService: CompanyService) {
super(
{
header: "Authorization",
prefix: "Api-Key "
},
true,
async (apiKey, done) => {
return this.validate(apiKey, done);
}
);
}
public async validate(apiKey: string, done: (error: Error, data) => {}) {
const company = await this.companyService.findByApiKey(apiKey);
if (company === null) {
throw new NotFoundException("Company not found");
}
return company;
}
}
@UseGuards(AuthGuard("api-key"))
export class CompaniesController {
constructor(private companyService: CompanyService) {}
@Get()
@ApiOperation({ title: "Get company information" })
public getCompany(@Request() req) {
// here request is empty, so i cannot access the user..
console.log("request", req);
return [];
}
}
谢谢你的帮助 !
解决方案
要访问登录的用户,您可以在请求中注入对象。为此,在您的ApiKeyStrategy
构造函数中,将第三个参数更改为如下所示:
async (apiKey, verified, req) => {
const user = await this.findUser(apiKey);
// inject the user in the request
req.user = user || null;
return verified(null, user || false);
}
现在,您可以访问已登录的用户:
getCompany(@Request() req) {
console.log(req.user);
}
我希望这可以帮助你。
推荐阅读
- python - 我想从使用scrapy刮取的数据中打印一个合适的表格
- powershell - NuGet 混乱 - 你能赢得比赛吗
- javascript - 如何从文件中调用和重用函数?
- vb.net - 将 stringbuilder 行转换为数组,然后对其进行洗牌
- c# - 如何在 .NET Core 3 中实现并行长时间运行的后台任务?
- python - Python Data Scraping with Beautiful Soup - 从 href 中获取数据
- sql - SQL 查询输出 - 小数位,整数太多
- c++ - C++ vector<> 到 QML 以绑定 bareries 值
- python - Python:打印/合并输出到一行
- angular - BehaviorSubject 返回错误数据