5

演示

嗨,我在 Angular8 应用程序中使用angularx-social-login版本。2.2.1在这里,由于谷歌身份验证令牌过期 1 小时,我必须调用刷新令牌的方法。我浏览了许多网站,但无法获得解决方案。我已经在 app 模块中安装和声明,现在在登录组件中使用来获取身份验证令牌和电子邮件地址,ID 来自登录 google 按钮单击。但是我不知道如何在附近调用刷新方法以获取到期时间。请帮忙。

HTML:

<button type="submit" class="btn btn-primary btn-block" (click)="signInWithGoogle()">Sign in with Google</button>

TS:

public signInWithGoogle(): void {
    let socialUser = this.oauthService.signIn(GoogleLoginProvider.PROVIDER_ID).then((userData) => {
      if(userData.idToken){
      
      } else {
        alert('danger')
      }
   });
  }

app.module.ts:

import { SocialLoginModule, AuthServiceConfig } from "angularx-social-login";
import { GoogleLoginProvider } from "angularx-social-login";

 imports: [
    SocialLoginModule
  ],
  providers: [
    {
      provide: AuthServiceConfig,
      useFactory: provideConfig
    }],

let config = new AuthServiceConfig([
  {
    id: GoogleLoginProvider.PROVIDER_ID,
    provider: new GoogleLoginProvider("1051927480520-u87cv859uap5e6t4r5f52mk96a8a6nhe.apps.googleusercontent.com")
  },
]);

export function provideConfig() {
  return config;
}

所以从演示中,我可以获得我选择的 gmail 帐户的详细信息,但是令牌会过期一个小时,我需要在它过期之前获取刷新令牌。请帮忙

4

1 回答 1

0

我不确定这个问题是否相关,但是SocialAuthServiceangularx-social-login包中实际公开了执行此操作的方法-refreshAuthToken(providerId: string): Promise<void>;

你可以简单地做例如:

refreshUserToken() {
    this.socialAuthService.refreshAuthToken(GoogleLoginProvider.PROVIDER_ID).then(() => {
      // Any post-refresh actions if needed
    });
  }

或者:

async refreshUserToken() {
    await this.socialAuthService.refreshAuthToken(GoogleLoginProvider.PROVIDER_ID);
  }

如果您已经订阅了authState更改,您将在刷新后获得一个新的SocialUser(带有新的、刷新的authToken)。请参阅 Github 上的此方法实现

免责声明:查看它仅适用于 Google 登录的实现。

于 2021-02-28T05:06:49.720 回答