laravel-fans / socialite-providers
Laravel Socialite 提供者
Requires
- php: >=7.2
- ext-json: *
- socialiteproviders/manager: >=v3.6
Requires (Dev)
- dflydev/dot-access-data: ^2.0
Replaces
- laravel-fans/socialite-coding: 0.1.0
- laravel-fans/socialite-wechat-service-account: 0.2.0
- laravel-fans/socialite-wechat-web: 0.2.0
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. 使用
-
现在您应该能够像通常使用 Socialite 一样使用它(假设您已安装 facade)
return Socialite::with('coding')->redirect();
Lumen 支持
您可以使用 Socialite 提供者与 Lumen。只需确保您已启用 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
等项目。
您可以通过访问属性 $user->accessTokenResponseBody
获取访问令牌响应体,在您调用 Socialite 中的 user()
方法后;
$user = Socialite::driver('coding')->user(); $accessTokenResponseBody = $user->accessTokenResponseBody;