Я новичок в NestJS и пытаюсь создать систему аутентификации. Я смог сделать. Итак, вот что я делаю, чтобы получить доступ к auth.
В моем контроллере у меня есть
@Get('/user')
async getUser(@AuthUser() token: string) : Promise<Object> {
return this.authService.getUser(token)
return token
}
Здесь я передаю декоратор AuthUser
, которого не хочу передавать в контроллеры. В методе authService.getUser
у меня что-то вроде этого
async getUser(token: string): Promise<Object> {
try {
const user = await this.jwtService.verifyAsync(token)
return user
} catch (error) {
return false
}
}
и мой декоратор выглядит так
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const AuthUser = createParamDecorator(
(data = 'u_ses', ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return data ? request.cookies?.[data] : request.cookies;
},
);
Я не люблю код. Если мне нужно узнать идентификатор пользователя из класса обслуживания или где-либо еще, мне нужно будет передать токен, а для получения токена мне нужно использовать @AuthUser() token: string)
Итак, я хочу сделать что-то вроде этого
this.authService.getUser()
, здесь я не хочу передавать токен или что-то еще и должен иметь доступ к этому getUser
методу откуда угодно. Поскольку это класс обслуживания, я могу вводить и использовать его, но у меня не будет токена.
Я попытался внедрить декоратор внутри класса обслуживания, но это не сработало.
Лучшее решение, которое я бы предпочел, - использовать JWT-элементы внутри декоратора, поэтому мне не нужен метод класса обслуживания :)
Я ищу от вас более приятные решения :)
Спасибо.