Oauth NestJS和PassportJS没有刷新令牌

Oauth NestJS和PassportJS没有刷新令牌,oauth,passport.js,google-oauth,dropbox-api,nestjs,Oauth,Passport.js,Google Oauth,Dropbox Api,Nestjs,我在我的NestJS应用程序中使用两种不同的策略实现了Google和Dropbox身份验证 问题是我从来没有在访问令牌的同时获得刷新令牌。我已经尝试从我的Google/Dropbox帐户中已授予的应用中删除该应用,但没有成功 从'@nestjs/common'导入{Injectable}; 从'@nestjs/passport'导入{PassportStrategy}; 从“passport-google-oauth2”导入{Strategy}; 从“/auth.service”导入{AuthS

我在我的NestJS应用程序中使用两种不同的策略实现了Google和Dropbox身份验证

问题是我从来没有在访问令牌的同时获得刷新令牌。我已经尝试从我的Google/Dropbox帐户中已授予的应用中删除该应用,但没有成功

从'@nestjs/common'导入{Injectable};
从'@nestjs/passport'导入{PassportStrategy};
从“passport-google-oauth2”导入{Strategy};
从“/auth.service”导入{AuthService};
从“./oauth user.entity”导入{OauthUser};
从“../user/user.service”导入{UserService};
从“../config/config.service”导入{ConfigService};
从“../shared/enums/cloud service.enum”导入{CloudProvider};
@可注射()
导出类GoogleStrategy扩展了PassportStrategy(策略“google”){
构造函数(私有只读authService:authService,
私有只读用户服务:用户服务,
专用只读配置服务:配置服务){
超级({
clientID:configService.get('OAUTH\u GOOGLE\u ID'),
clientSecret:configService.get('OAUTH\u GOOGLE\u SECRET'),
callbackURL:configService.get('OAUTH\u GOOGLE\u CALLBACK'),
passReqToCallback:正确,
范围:[‘电子邮件’,‘个人资料’,'https://www.googleapis.com/auth/drive.file'],
accessType:“脱机”,
提示:“同意”,
会话:错误,
});
}
异步验证(请求:任意、accessToken:string、refreshToken:string、oauthUser:oauthUser){
console.log('accessToken',accessToken)//{
返回{jwt};
});
});
}
}
从'@nestjs/common'导入{Injectable};
从'@nestjs/passport'导入{PassportStrategy};
从“passport-google-oauth20”导入{Strategy,VerifyCallback};
从“./interfaces/user.interface”导入{IUserProfile};
@可注射()
导出类GoogleStrategy扩展了PassportStrategy(策略){
构造函数(){
超级({
clientID:process.env.GOOGLE\u CLIENT\u ID,
clientSecret:process.env.GOOGLE\u CLIENT\u SECRET,
callbackURL:process.env.GOOGLE\u CB\u URL,
范围:['email','profile'],
});
}
authorizationParams():{[key:string]:string;}{
返回({
访问类型:“脱机”
});
};
异步验证(
accessToken:string,
刷新令牌:字符串,
简介:IUserProfile,
完成:验证回调,
):承诺{
const{emails}=profile;
日志(accessToken、refreshToken);
完成(null,{email:emails[0].value,accessToken});
}
}

我无法与Google API对话,但请注意,Dropbox API当前未使用刷新令牌(krasava,sps)))这对我不起作用,但在我向authorizationParams的返回对象添加了额外的属性提示:“同意”后,它开始起作用。看见
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy, VerifyCallback } from 'passport-google-oauth20';

import { IUserProfile } from './interfaces/user.interface';

@Injectable()
export class GoogleStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super({
      clientID: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
      callbackURL: process.env.GOOGLE_CB_URL,
      scope: ['email', 'profile'],
    });
  }

  authorizationParams(): { [key: string]: string; } {
    return ({
      access_type: 'offline'
    });
  };

  async validate(
    accessToken: string,
    refreshToken: string,
    profile: IUserProfile,
    done: VerifyCallback,
  ): Promise<void> {
    const { emails } = profile;
    console.log(accessToken, refreshToken);
    done(null, {email: emails[0].value, accessToken});
  }
}