【发布时间】:2019-10-06 04:05:09
【问题描述】:
我采用两种不同的策略在我的 NestJS 应用中实现了 Google 和 Dropbox 身份验证。
问题是我从来没有得到一个 refresh_token 和 access_token。我已经尝试从我的 Google/Dropbox 帐户中已授予的应用程序中删除该应用程序,但没有成功。
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy } from 'passport-google-oauth2';
import { AuthService } from './auth.service';
import { OauthUser } from './oauth-user.entity';
import { UserService } from '../user/user.service';
import { ConfigService } from '../config/config.service';
import { CloudProvider } from '../shared/enums/cloud-service.enum';
@Injectable()
export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
constructor(private readonly authService: AuthService,
private readonly userService: UserService,
private readonly configService: ConfigService) {
super({
clientID: configService.get('OAUTH_GOOGLE_ID'),
clientSecret: configService.get('OAUTH_GOOGLE_SECRET'),
callbackURL: configService.get('OAUTH_GOOGLE_CALLBACK'),
passReqToCallback: true,
scope: ['email', 'profile', 'https://www.googleapis.com/auth/drive.file'],
accessType: 'offline',
prompt: 'consent',
session: false,
});
}
async validate(request: any, accessToken: string, refreshToken: string, oauthUser: OauthUser) {
console.log('accessToken', accessToken) // <- this one is good
console.log('refreshtoken', refreshToken) // <- always undefined
oauthUser.provider = CloudProvider.GOOGLE;
return this.userService.getOrCreate(oauthUser, accessToken).then(() => {
return this.authService.getJwtForUser(oauthUser).then(jwt => {
return { jwt };
});
});
}
}
【问题讨论】:
-
我无法使用 Google API,但请注意 Dropbox API 目前不使用刷新令牌。
标签: oauth passport.js google-oauth dropbox-api nestjs