jakebooy2/discord-provider

此包最新版本(3.4)没有可用的许可证信息。

Discord 的 OAuth2 提供者

3.4 2021-12-27 21:12 UTC

This package is auto-updated.

Last update: 2024-09-28 03:08:12 UTC


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
}