laravel-socialite-providers/socialite-providers

此包已被废弃,不再维护。作者建议使用 laravel-fans/socialite-providers 包。

Laravel Socialite 提供商

1.0.0 2020-09-12 04:21 UTC

This package is auto-updated.

Last update: 2020-09-12 04:25:58 UTC


README

1. 安装

composer require laravel-fans/socialite-providers

2. 服务提供者

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

  • \SocialiteProviders\Manager\ServiceProvider::class 添加到 config\app.php 中的 providers[] 数组。

例如

return [
    'providers' => [
        /*
         * Package Service Providers...
         */
        // remove 'Laravel\Socialite\SocialiteServiceProvider',
        \SocialiteProviders\Manager\ServiceProvider::class,
    ]
];
  • 注意:如果您想使用 Socialite Facade,您需要 安装它。

3. 事件监听器

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

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

  • 您为该提供商添加的监听器是 'LaravelFans\\SocialiteProviders\\Coding\\CodingExtendSocialite@handle',

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

例如

use LaravelFans\SocialiteProviders\Coding\CodingExtendSocialite;
use LaravelFans\SocialiteProviders\WeChatWeb\WeChatWebExtendSocialite;
use SocialiteProviders\Manager\SocialiteWasCalled;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        SocialiteWasCalled::class => [
            // add your listeners (aka providers) here
            CodingExtendSocialite::class,
            WeChatWebExtendSocialite::class,
        ],
    ];
}

参考

4. 配置设置

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

添加到 config/services.php

return [
    'coding' => [
        'client_id' => env('CODING_CLIENT_ID'),
        'client_secret' => env('CODING_CLIENT_SECRET'),
        'redirect' => env('CODING_CALLBACK_URL'),
        'guzzle' => [
            'base_uri' => 'https://' . env('CODING_TEAM') . '.coding.net/',
        ],
        'scopes' => preg_split('/,/', env('CODING_SCOPES'), null, PREG_SPLIT_NO_EMPTY), // optional, can not use explode, see vlucas/phpdotenv#175
    ],
];

5. 使用

  • Laravel 配置文档

  • 现在您应该可以像平常使用 Socialite 一样使用它(假设您已安装 facade)

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

Lumen 支持

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

注意:如果您使用 Lumen,由于 Lumen 不跟踪状态,所有提供商将自动为无状态。

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

无状态

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

注意:如果您使用 Lumen,由于 Lumen 不跟踪状态,所有提供商将自动为无状态。

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

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

覆盖配置

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

$clientId = "foo";
$clientSecret = "bar";
$redirectUrl = "http://127.0.0.1:8000/login/coding/callback";
$additionalProviderConfig = [
    // Add additional configuration values here.
    'guzzle' => [
        'base_uri' => 'https://your-team.coding.net/',
    ],
];
$config = new \SocialiteProviders\Manager\Config(
    $clientId,
    $clientSecret,
    $redirectUrl,
    $additionalProviderConfig
);

return Socialite::with('coding')->setConfig($config)->redirect();

获取访问令牌响应体

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

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

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

参考