我使用knpuniversity/oauth2-client-bundle
和league/oauth2-google
通过“使用Google登录”功能连接我的Symfony 4 Web应用程序中的用户。我遵循了this tuto。我在Google上注册了我的应用。
我在access_type: offline
配置中设置了knpu.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
。
为什么我没有获得用户刷新令牌?
根据documentation,“刷新令牌仅提供给请求脱机访问的应用程序”。因此,在实例化提供程序时,您需要设置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 configuration中,您可以执行:
google:
type: google
client_id: '%env(OAUTH_GOOGLE_CLIENT_ID)%'
client_secret: '%env(OAUTH_GOOGLE_CLIENT_SECRET)%'
redirect_params: {}
access_type: offline