作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Angular+Nest 开发一个网站。我创建了一个服务(Angular),以便客户端可以在项目启动时从服务器获取用户信息(与新鲜相同)。有些 Action 不需要登录,所以登录是可选的。
我想要的是如果用户已经登录,那么客户端应该发送一个请求来获取用户的信息。
服务器代码如下:
export const RequestUser = createParamDecorator((data, req): RequestUserDTO => {
return req.user;
});
@Controller('auth')
export class AuthController {
@Get('getUserInfoByToken')
async getUserInfoByToken(@RequestUser() user: User): Promise<any> {
if (user) {
return {
nickname: user.nickname,
level: user.level
};
}
}
}
@UseGuards(AuthGuard())
就没有任何返回。作为装饰者。但是如果我添加它,当项目开始时,这个请求返回
401
作为状态码。然后网页将转到登录页面。
最佳答案
如果您有完全不同的方法,请告诉我 - 会尽力提供帮助。
将尝试提供更详细的示例,其中包括 passport
在引擎盖下。它假设 passport
被使用并且Authorization
正在发送 token 。
const RegisteredPassportModule = PassportModule.register({ defaultStrategy: 'bearer' })
HttpStrategy
给一些 AuthModule
PassportModule.register({ defaultStrategy: 'bearer' })
导入到 AuthModule
AuthService
是一项服务(也是
AuthModule
的一部分),它允许通过通过
Authorization
传递的 token 发送的 token 来查找给定用户。标题,直接来自数据库。
import { Strategy } from 'passport-http-bearer';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { AuthService } from './auth.service';
@Injectable()
export class HttpStrategy extends PassportStrategy(Strategy) {
constructor(private readonly authService: AuthService) {
super()
}
async validate(token: string) {
const user = await this.authService.findUserByToken(token);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
@UseGuards(AuthGuard())
@Get()
someMethod(@Req() request: RequestWithUser, ...) {
// ...
}
RequestWithUser
只是:
import { User as UserEntity } from '../../models/user.entity'
export type RequestWithUser = Request & { user: UserEntity }
/user
端点将只是返回
request.user
关于angular - 如何在 Nest.js 中获取用户信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921758/
我是一名优秀的程序员,十分优秀!