recca0120/laravelpassport-provider

LaravelPassport OAuth2 提供者用于 Laravel Socialite

v1.0.2 2018-02-09 04:50 UTC

This package is auto-updated.

Last update: 2024-09-10 06:09:39 UTC


README

安装

1.COMPOSER

// This assumes that you have composer installed globally
composer require recca0120/laravelpassport-provider

2. 服务提供者

  • 如果你的 providers[] 数组中已经添加了 Laravel\Socialite\SocialiteServiceProvider,请从 config\app.php 中移除。
  • 将 \SocialiteProviders\Manager\ServiceProvider::class 添加到 config\app.php 中的 providers[] 数组。

例如

'providers' => [
    // a whole bunch of providers
    // remove 'Laravel\Socialite\SocialiteServiceProvider',
    \SocialiteProviders\Manager\ServiceProvider::class, // add
];
  • 注意:如果你想使用 Socialite Facade,你需要 安装它

3. 添加事件和监听器

  • 将 SocialiteProviders\Manager\SocialiteWasCalled 事件添加到 <app_name>/Providers/EventServiceProvider 中的 listen[] 数组。

  • 将你的监听器(即来自提供者的)添加到刚刚创建的 SocialiteProviders\Manager\SocialiteWasCalled[]。

  • 为该提供者添加的监听器是 'SocialiteProviders\HumanApi\HumanApiExtendSocialite@handle'。

  • 注意:除非你用你自己的提供者覆盖它们,否则你不需要为内置的 socialite 提供者添加任何内容。

例如

/**
 * The event handler mappings for the application.
 *
 * @var array
 */
protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        // add your listeners (aka providers) here
        'SocialiteProviders\LaravelPassport\LaravelPassportExtendSocialite@handle',
    ],
];

参考

4. 配置设置

为了开发目的,所需的配置会自动从 .env 文件中检索,前提是它们被准确写入如下所示。但是,我们建议你 手动将条目添加到服务配置文件中,因为配置文件在用于生产环境的缓存(Laravel 命令 artisan config:cache)之后,.env 文件中存储的值将无法再由应用程序访问,并且提供者将无法工作

将提供者值添加到 **.ENV** 文件

SERVICE_LARAVELPASSPORT_HOST=http://server.dev
SERVICE_LARAVELPASSPORT_CLIENT_ID=client_id
SERVICE_LARAVELPASSPORT_CLIENT_SECRET=client_secret
SERVICE_LARAVELPASSPORT_REDIRECT=http://client.dev/auth/laravelpassport/callback

添加到 **CONFIG/SERVICES.PHP**。

'laravelpassport' => [
    'host' => env('SERVICE_LARAVELPASSPORT_HOST'),
    'client_id' => env('SERVICE_LARAVELPASSPORT_CLIENT_ID'),
    'client_secret' => env('SERVICE_LARAVELPASSPORT_CLIENT_SECRET'),
    'redirect' => env('SERVICE_LARAVELPASSPORT_REDIRECT'),

    // optional
    'authorize_uri' => 'oauth/authorize', // if your authorize_uri isn't same, you can change it
    'token_uri' => 'oauth/token', // if your token_uri isn't same, you can change it
    'userinfo_uri' => 'api/user', // if your userinfo_uri isn't same, you can change it
    'userinfo_key' => '', // if your userinfo response is like {"data": {"id" => "xxx", "email" => "xxx@test.com"}} you can set userinfo_key 'userinfo_info' => 'data'
]

参考

使用

  • 现在你应该能够像常规使用 Socialite 一样使用它(假设你已经安装了 facade)
return Socialite::with('laravelpassport')->redirect();

LUMEN 支持

你可以使用 Socialite 提供者与 Lumen 一起使用。只需确保你已经开启了 facade 支持,并且正确地遵循了设置说明。

注意:如果你使用 Lumen,所有提供者都将自动变为无状态的,因为 Lumen 不会跟踪状态。

此外,在 Lumen 中无法从 services[] 解析配置。你可以只设置 .env 文件中的值,如本文件中所示。如有需要,你也可以覆盖配置(如下所示)。

无状态

  • 你可以设置是否想以无状态的方式使用提供者。请记住,OAuth 提供者(Twitter、Tumblr 等)必须支持你选择的任何选项。

注意:如果你使用 Lumen,所有提供者都将自动变为无状态的,因为 Lumen 不会跟踪状态。

// to turn off stateless
return Socialite::with('laravelpassport')->stateless(false)->redirect();

// to use stateless
return Socialite::with('laravelpassport')->stateless()->redirect();

覆盖配置

如果你需要在应用程序的任何地方动态地覆盖提供者的环境或配置变量,你可以使用以下方法

$clientId = "secret";
$clientSecret = "secret";
$redirectUrl = "http://yourdomain.com/api/redirect";
$additionalProviderConfig = ['site' => 'meta.stackoverflow.com'];
$config = new \SocialiteProviders\Manager\Config($clientId, $clientSecret, $redirectUrl, $additionalProviderConfig);
return Socialite::with('laravelpassport')->setConfig($config)->redirect();

检索访问令牌响应体

Laravel Socialite 默认只允许访问 access_token。这可以通过 \Laravel\Socialite\User->token 公共属性访问。有时你需要访问整个响应体,这可能包含诸如 refresh_token 等项目。

通过访问属性 $user->accessTokenResponseBody,你可以在调用 Socialite 中的 user() 方法后获取访问令牌响应体。

$user = Socialite::driver('laravelpassport')->user();
$accessTokenResponseBody = $user->accessTokenResponseBody;

laravelpassport

参考