这很难找到信息,部分原因是 Laravel 的 OAuth2-server 包提供了自己的 OAuth 解决方案,这是大部分搜索结果。
我认为最好的答案是为社交名流编写自己的 YoutubeProvider。这是一个教程:https ://medium.com/laravel-news/adding-auth-providers-to-laravel-socialite-ca0335929e42#.6bn8i2wz4
将 Socialite 更改为开始使用刷新令牌会很痛苦,所以我认为最好的方法是让 YoutubeProvider 在现有 getAccessToken 函数的末尾额外调用一个新的 getRefreshToken 函数。更改访问令牌和刷新令牌以将检索到的令牌保存到数据库中,因为社交名流不会为您提供访问刷新令牌以将其保存在助手/控制器类中的选项。
创建一个 Tokens 模型和数据库表,并在其中存储访问和刷新令牌以及与 User 模型的关系。
当您编写 YoutubeService 帮助程序时,它需要能够尝试使用访问令牌进行 API 调用,并知道在收到过期/无效的错误消息时使用刷新令牌刷新它。
谷歌的 PHP API 库似乎可以自动处理这个问题$client->setAccessType("offline")
:https ://developers.google.com/api-client-library/php/auth/web-app
但是,一旦您开始需要 Google 以外的其他东西的刷新令牌,如果新的提供者也没有库,那么无论如何您都将编写该代码。从好的方面来说,这个库有一个专门用于 Youtube 的服务,所以它应该处理你可能需要的所有对 Youtube 的 API 调用。我不完全确定使用这个库将如何与 Socialite 相结合,因为 Socialite 似乎已经做了很多这个库所做的事情。除非您真的想开始自定义内容,否则您可能最终会在 YoutubeService 类中进行某种冗余授权。
可能值得考虑将社交名流完全从等式中删除,并在涉及到他们的服务时使用谷歌的图书馆。