jakebooy2 / discord-provider
此包最新版本(3.4)没有可用的许可证信息。
Discord 的 OAuth2 提供者
3.4
2021-12-27 21:12 UTC
Requires
- php: ^7.0 || ^8.0
- ext-json: *
- socialiteproviders/manager: ~4.0
README
1. 安装
composer require jakebooy2/discord-provider
2. 服务提供商
将 \SocialiteProviders\Manager\ServiceProvider::class
添加到 config\app.php
文件中的 providers[]
数组。例如
'providers' => [
// a whole bunch of providers
// remove 'Laravel\Socialite\SocialiteServiceProvider',
\SocialiteProviders\Manager\ServiceProvider::class, // add
];
3. 事件监听器
-
将
SocialiteProviders\Manager\SocialiteWasCalled
事件添加到app/Providers/EventServiceProvider
文件中的listen[]
数组。 -
将您的监听器(即来自提供者的)添加到您刚刚创建的
SocialiteProviders\Manager\SocialiteWasCalled[]
。 -
您为该提供者添加的监听器是
'SocialiteProviders\\Discord\\DiscordExtendSocialite@handle',
。 -
注意:除非您使用自己的提供者覆盖它们,否则您不需要为内置的社交ite提供者添加任何内容。例如
/**
* The event handler mappings for the application.
*
* @var array
*/
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
// add your listeners (aka providers) here
'Jakebooy\\DiscordProvider\\DiscordExtendSocialite@handle',
],
];
您需要向服务配置文件中添加条目,以便在配置文件被缓存以用于生产环境(Laravel 命令 artisan config:cache
)之后,所有配置仍然可用。
4. 添加到 config/services.php
。
'discord' => [
'client_id' => env('DISCORD_KEY'),
'client_secret' => env('DISCORD_SECRET'),
'redirect' => env('DISCORD_REDIRECT_URI'),
'bot_token' => env('DISCORD_BOT_TOKEN'),
],
5. 使用方法
使用提供者就像向 Socialite 提供 discord 驱动程序一样简单。
获取访问令牌响应体
Laravel Socialite 默认仅允许访问 access_token
。它可以通过 \Laravel\Socialite\User->token
公共属性访问。有时您需要访问整个响应体,这可能包含诸如 refresh_token
之类的项。
您可以通过访问属性 $user->accessTokenResponseBody
在调用 Socialite 的 user()
方法后获取访问令牌响应体;
$user = Socialite::driver('discord')->user();
$accessTokenResponseBody = $user->accessTokenResponseBody;
登录
use Socialite;
public function login(){
return Socialite::with('discord')->redirect();
}
public function confirm(){
$user = Socialite::driver('discord')->user();
//
}
刷新令牌
use Socialite;
public function refresh($token){
$response = Socialite::driver('discord')->refreshToken($token);
// $response->access_token
}