setemares / freee-socialite
Laravel Socialite 的 Freee OAuth2 提供商
v0.1.2
2019-02-06 04:38 UTC
Requires
- php: ^5.6 || ^7.0
- socialiteproviders/manager: ~3.0
This package is not auto-updated.
Last update: 2024-09-23 16:57:12 UTC
README
此存储库包含 Freee 提供商,用于 Laravel Socialite。
内容
安装
$ composer require setemares/freee-socialite
- 您需要扩展 Socialite 以添加 Freee 提供商,转到 AppServiceProvider.php 并添加以下内容
use SeteMares\Freee\Provider as FreeeProvider;
- 在
boot()
方法中添加以下内容
$this->bootFreeeSocialite();
- 创建此方法
private function bootFreeeSocialite() { $socialite = $this->app->make('Laravel\Socialite\Contracts\Factory'); $socialite->extend('freee', function ($app) use ($socialite) { $config = $app['config']['services.freee']; return $socialite->buildProvider(FreeeProvider::class, $config); }); }
配置
- 添加到
config/services.php
'freee' => [ 'client_id' => env('FREEE_CLIENT_ID', ''), 'client_secret' => env('FREEE_CLIENT_SECRET', ''), 'redirect' => env('FREEE_CALLBACK', 'urn:ietf:wg:oauth:2.0:oob') ]
- 将配置变量添加到您的
.env
文件中
# Freee FREEE_CLIENT_ID=Your_client_id FREEE_CLIENT_SECRET=Your_client_secret FREEE_CALLBACK=Your_callback_url
使用
- 要获取令牌,像其他任何社交ite提供商一样使用,例如
public function oauthRedirect() { return Socialite::driver('freee') ->with(['access_type' => 'offline']) ->redirect(); } public function oauthCallback() { try { $user = Socialite::driver('freee') ->user(); } catch (\Exception $e) { return $this->respondError(Lang::getFromJson("No user in oauth response"), 422); } // $user contains freee user `id` and `companies` array besides // token information (`token`, `expiresIn`, `refreshToken`) }
- 要刷新令牌,调用提供的 refreshToken($refresh_token) 方法
try { $data = Socialite::driver('freee')->refreshToken($refreshToken); } catch (\Exception $e) { // GuzzleHttp\Exception\ClientException: return $e->getMessage()); }
问题
- 如果
redirect_uri
中配置了除urn:ietf:wg:oauth:2.0:oob
之外的任何内容,Freee 将拒绝发放用于获取访问令牌的访问代码。如果在其中包含urn:ietf:wg:oauth:2.0:oob
,则会在屏幕上显示令牌,需要用户手动复制代码并将其粘贴到您的应用程序中,以继续身份验证流程。 - 另一个更严重的问题是刷新令牌的能力,当访问令牌发放没有问题时,但在它过期后,Freee api 将拒绝提供新的访问令牌,并返回
invalid_grant
错误,要求用户重复身份验证流程。
致谢
许可协议
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。