【发布时间】:2017-12-15 13:55:16
【问题描述】:
Socialite 获得的access_token(通过Socialite::driver(self::PROVIDER)->user() 的有效期有限。对于Google 来说是一个小时。
我可以通过将重定向调用更改为:
Socialite::driver(self::PROVIDER)->stateless()->with([
'access_type' => 'offline',
])->redirect()
一个小时内,我可以通过调用读取基于access_token 的用户数据
// $token = read_stored_access_token()
\Socialite::driver(self::PROVIDER)->userFromToken($accessToken);
一小时后,当令牌失效时,Google API 开始返回 401 Unauthorized,Socialite 将其传播出去:
(1/1) ClientException
Client error: `GET https://www.googleapis.com/plus/v1/people/me?prettyPrint=false` resulted in a `401 Unauthorized` response:
{"error":{"errors":[{"domain":"global","reason":"authError","message":"Invalid Credentials","locationType":"header","loc (truncated...)
现在有了refresh_token,我应该可以轻松刷新access_token。但我在社交名流文档或源代码中找不到可以让我这样做的内容。
真的是使用 Google 的 API 库并手动完成此操作的唯一方法吗?它不会扼杀使用社交名流的整个想法吗?
注意:我试图避免再次致电redirect(),因为这可能会迫使用户每小时选择他的一个 Google 帐户,这很烦人。
谢谢!
【问题讨论】:
-
还有一个后续问题:如果不手动实现自己的客户端就无法进一步使用
refresh_token,那么提供访问权限有什么意义?
标签: php laravel laravel-socialite