setemares/freee-socialite

Laravel Socialite 的 Freee OAuth2 提供商

v0.1.2 2019-02-06 04:38 UTC

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)。请参阅 许可证文件 了解更多信息。