datahivedevelopment/hiveidsocialiteprovider

Laravel Socialite 的 Hive ID OAuth2 提供者

v2.0.0 2020-01-01 16:56 UTC

This package is auto-updated.

Last update: 2024-09-29 05:29:01 UTC


README

快速设置

composer require datahivedevelopment/hiveidsocialiteprovider

1. 在 config\app.php 中的 providers[] 数组中添加

'providers' => [
    \SocialiteProviders\Manager\ServiceProvider::class,
];

2. 在 app/Providers/EventServiceProvider 中添加事件监听器

protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        'DataHiveDevelopment\\HiveIDSocialiteProvider\\HiveIDExtendSocialite@handle',
    ],
];

3. 在 config/services.php 中添加配置

'hiveid' => [
    'server' => env('HIVEID_SERVER'), // Optional server parameter
    'client_id' => env('HIVEID_CLIENT_ID'),
    'client_secret' => env('HIVEID_CLIENT_SECRET'),
    'redirect' => env('HIVEID_REDIRECT')
],

步骤-by-步骤

1. 安装

// This assumes that you have composer installed globally
composer require datahivedevelopment/hiveidsocialiteprovider

2. 服务提供者

  • 如果您已经添加了 Laravel\Socialite\SocialiteServiceProvider,请从 config\app.php 中的 providers[] 数组中移除它。

  • \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/Providers/EventServiceProvider 中的 listen[] 数组。

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

  • 为该提供者添加的监听器是 'DataHiveDevelopment\\HiveIDSocialiteProvider\\HiveIDExtendSocialite@handle',

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

例如

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

参考

4. 配置设置

您需要向服务配置文件添加一个条目,以便在配置文件缓存以在生产环境中使用(Laravel 命令 artisan config:cache)之后,所有配置仍然可用。

添加到 config/services.php

'hiveid' => [
    'server' => env('HIVEID_SERVER'), // Optional server parameter
    'client_id' => env('HIVEID_CLIENT_ID'),
    'client_secret' => env('HIVEID_CLIENT_SECRET'),
    'redirect' => env('HIVEID_REDIRECT')
],

Server 配置值

您可以在 .env 文件中指定可选的 HIVEID_SERVER 以覆盖使用生产 Hive ID 认证系统。这在开发过程中非常有用,需要测试对 Hive ID 的修改以使用其他应用程序。值应按 http://id.test 的格式输入,注意没有尾随的 /。在适当的 API 调用中将自动追加 /oauth/authorize/oauth/token 端点。

5. 使用

return Socialite::with('hiveid')->redirect();

Lumen 支持

您可以使用 Socialite 提供者与 Lumen。只需确保已启用 facade 支持,并且正确遵循设置说明。

此外,Lumen 无法从 services[] 解析配置。您只能像本文件中所示一样在 .env 文件中设置值。如果需要,您还可以覆盖配置(如下所示)。

无状态

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

注意:如果您在使用 Lumen,所有提供者将自动是无状态的,因为 Lumen 不跟踪状态。

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

// to use stateless
return Socialite::with('hiveid')->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('hiveid')->setConfig($config)->redirect();

检索访问令牌响应体

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

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

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