Я пытаюсь выполнить авторизацию Auth0 в NestJS, но я не уверен, как получить данные пользователя в обработчике URL-адреса обратного вызова.
При использовании функции обычного экспресса это можно решить с помощью приведенного ниже кода.Я вызываю функцию passport.authenticate ('auth0', function (err, user, info) {}) с функцией обратного вызова и получаю в ней дату пользователя.
// Perform the final stage of authentication and redirect to previously requested URL or '/user'
router.get('/callback', function (req, res, next) {
passport.authenticate('auth0', function (err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function (err) {
if (err) { return next(err); }
const returnTo = req.session.returnTo;
delete req.session.returnTo;
res.redirect(returnTo || '/user');
});
})(req, res, next);
});
Но я не уверен, как это должно бытьсделано в стиле NestJS.С декораторами и охранниками.В NestJS я добавляю следующую функцию.Но как мне получить данные пользователя в нем?
@Get('cb')
async callback(): Promise<any> {
// WHAT SHOULD I CALL HERE?
}
auth.controller.ts
@Controller('auth')
export class AuthController {
constructor(
private readonly authService: AuthService,
) {}
@Get('login')
@UseGuards(AuthGuard('auth0'))
async login(): Promise<any> {
const v = this.configService.get('TEST');
return { r: 'ok1', v };
}
@Get('cb')
// @UseGuards(AuthGuard('auth0'))
async callback(): Promise<any> {
// WHAT SHOULD I CALL HERE?
}
}
auth0.strategy.ts
@Injectable()
export class Auth0Strategy extends PassportStrategy(Strategy) {
constructor(
private readonly authService: AuthService,
private readonly configService: ConfigService,
) {
super({
domain: 'zzzz',
clientID: 'zzzz',
clientSecret: 'zzzz',
callbackURL: '/auth/cb',
});
}
async validate(payload) {
console.log('Auth0Strategy payload', payload);
return payload;
}
}