use*_*713 9 oauth laravel google-api-php-client laravel-socialite laravel-5.1
Socialiate插件为Laravel中的OAuth提供了一个实现,但它似乎主要是为了让他们不必在自己的网站上创建用户帐户.
我正在创建一个有助于管理其Youtube帐户的应用程序,这意味着auth请求的范围更广(容易更改)但我还需要刷新令牌(而不仅仅是访问令牌)以便长期访问其帐户.
是否有Laravel的包装已经处理过了?我找不到一个,但也许我正在寻找错误的东西.
如果没有,我该怎么做呢?当我编写与Youtube的API交互的代码时,我是否只需要检查访问令牌是否过期,如果是,请编写一个执行HTTP请求的函数来获取一个带有我存储在其中的刷新令牌的新请求数据库?我想还会扩展Socialite来检索刷新令牌?
我觉得必须有一个更好的方式,不要让我重新发明轮子.
tyt*_*a03 20
自从这个问题上次访问以来已经有一段时间了,并且看到这是Google的第一个结果,我想说:现在社交网站可以实现这一点.
当您重定向用户到谷歌,设置access_type于offline与with()重定向时,这样的方法:
return Socialite::driver('google')
->scopes() // For any extra scopes you need, see https://developers.google.com/identity/protocols/googlescopes for a full list; alternatively use constants shipped with Google's PHP Client Library
->with(["access_type" => "offline", "prompt" => "consent select_account"])
->redirect();
Run Code Online (Sandbox Code Playgroud)
这将使Google返回刷新令牌.
这很难找到信息,部分原因是 Laravel 的 OAuth2-server 包提供了自己的 OAuth 解决方案,这是大多数搜索结果。
我认为最好的答案是为社交名流编写自己的 YoutubeProvider。这是一个教程:https://medium.com/laravel-news/adding-auth-providers-to-laravel-socialite-ca0335929e42#.6bn8i2wz4
将 Socialite 更改为开始使用刷新令牌将是一件痛苦的事情,因此我认为最好的途径是 YoutubeProvider 在现有 getAccessToken 函数末尾额外调用一个新的 getRefreshToken 函数。更改访问令牌和刷新令牌以将检索到的令牌保存到数据库中,因为 Socialite 不会为您提供访问刷新令牌以将其保存在帮助程序/控制器类中的选项。
创建令牌模型和数据库表,并在其中存储访问令牌和刷新令牌以及与用户模型的关系。
当您编写 YoutubeService 帮助程序时,它将需要能够使用访问令牌尝试 API 调用,并知道在收到过期/无效的错误消息时使用刷新令牌刷新它。
Google 的 PHP API 库似乎可以自动处理这个问题$client->setAccessType("offline"):https ://developers.google.com/api-client-library/php/auth/web-app
但是,一旦您开始需要 Google 之外的其他内容的刷新令牌,如果新的提供商也没有库,您无论如何都会编写该代码。从好的方面来说,这个库有一个专门针对 Youtube 的服务,因此它应该处理您可能需要的所有对 Youtube 的 API 调用。我完全不确定使用这个库将如何与 Socialite 相结合,因为 Socialite 似乎已经做了这个库所做的很多事情。除非您真的想开始自定义,否则您可能最终会在 YoutubeService 类中进行某种冗余授权。
当涉及到他们的服务时,可能值得考虑完全将社交名流从等式中删除并使用谷歌的库。
| 归档时间: |
|
| 查看次数: |
4689 次 |
| 最近记录: |