首页 > 解决方案 > 如何使用 knpuniversity/oauth2-client-bundle 获取 Google 刷新令牌?

问题描述

我在我的 Symfony 4 Web 应用程序中使用并使用“使用 Google 登录”功能连接用户knpuniversity/oauth2-client-bundleleague/oauth2-google我跟着这个教程。我在 Google 中注册了我的应用程序。

access_type: offlineknpu.oauth2.client.google配置中设置(config/packages/knpu_oauth2_client.yaml文件)

我尝试在我的GoogleAuthenticator::getUser(League\OAuth2\Client\Token\AccessToken $credentials)方法(扩展KnpU\OAuth2ClientBundle\Security\Authenticator\SocialAuthenticator)中获取用户刷新令牌。

不幸的是,$credentials->getRefreshToken()总是返回null

为什么我没有得到用户刷新令牌?

标签: symfonyoauth-2.0google-oauthrefresh-token

解决方案


根据文档,“刷新令牌仅提供给请求离线访问的应用程序”。因此,在实例化提供程序时,您需要设置 accessType。

use League\OAuth2\Client\Provider\Google;

$provider = new Google([
    'clientId'     => '{google-client-id}',
    'clientSecret' => '{google-client-secret}',
    'redirectUri'  => 'https://example.com/callback-url',
    'accessType'   => 'offline',
]);

在 knpu_oauth2_client配置中,您可以执行以下操作:

google:
    type: google
    client_id: '%env(OAUTH_GOOGLE_CLIENT_ID)%'
    client_secret: '%env(OAUTH_GOOGLE_CLIENT_SECRET)%'
    redirect_params: {}
    access_type: offline

推荐阅读