Open
Description
I'm submitting a...
[ ] Regression
[x] Bug report
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead post your question on Stack Overflow.
Current behavior
Extending PassportStrategy
does not work as expected. In case of extending PassportStrategy(Strategy, 'google')
additional OAuth2 options, respectively provider specific options like e.g. approval_prompt
passed to Superconstructor are NOT applied. So it is not possible to obtain a REFRESH_TOKEN.
Expected behavior
Additional, provider specific OAuth2 options can be passed through the Superconstructor and become effective.
Minimal reproduction of the problem with instructions
My Google OAuth2 strategy implementation:
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy } from 'passport-google-oauth20';
import { AuthService, Provider } from './auth.service';
import { ConfigService } from '../config/config.service';
import { User } from '../api/user/user.interface';
@Injectable()
export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
constructor(configService: ConfigService, private readonly authService: AuthService) {
super({
clientID: configService.get('OAUTH_CLIENT_ID'),
clientSecret: configService.get('OAUTH_CLIENT_SECRET'),
callbackURL: `${configService.baseUrl}/auth/google/callback`,
passReqToCallback: true,
scope: ['email', 'profile'],
// NOT WORKING
approval_prompt: 'force',
access_type: 'offline',
});
}
async validate(request: any, accessToken: string, refreshToken: string, profile: any, done: (err: any, result: any) => void) {
// ...
}
// WORKAROUND: pass options to superclass auth call by overriding superclass method
authorizationParams(options: any): any {
return Object.assign(options, {
approval_prompt: 'force',
access_type: 'offline',
});
}
}
Environment
@nestjs/passport: 6.0.0
For Tooling issues:
- Node version: 10.11.0
- Platform: Mac