martinbean / socialite-discord-provider
为 Laravel Socialite 提供的 Discord 提供者。
Requires
- facade/ignition-contracts: ^1.0
- laravel/socialite: ^4.0|^5.0
This package is auto-updated.
Last update: 2024-08-29 05:49:45 UTC
README
为 Laravel Socialite 提供的提供者,允许以 Discord 用户或机器人的身份进行身份验证。
安装
composer require martinbean/socialite-discord-provider:^1.2
使用
该软件包注册了一个名为 discord
的 Socialite 驱动器。
在使用驱动器之前,请先在 Discord 开发者门户中创建一个 OAuth 应用程序: https://discord.com/developers/applications
将客户端 ID 和客户端密钥设置为环境变量,然后在您的 config/services.php 文件中引用它们。如果您打算以用户身份进行身份验证,您还需要将重定向 URL 添加到您的应用程序中。
<?php // config/services.php return [ // Any other services 'discord' => [ 'client_id' => env('DISCORD_CLIENT_ID'), 'client_secret' => env('DISCORD_CLIENT_SECRET'), 'redirect' => '/auth/discord/callback', ], ];
redirect
值需要与 Discord 应用程序设置中的重定向 URL 匹配。它可以像上面那样是相对的。
以用户身份进行身份验证
创建一个控制器以重定向和处理访问令牌回调
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Laravel\Socialite\Facades\Socialite; class DiscordController extends Controller { /** * Redirect the user to the Discord authentication page. * * @return \Illuminate\Http\Response */ public function redirectToProvider() { return Socialite::driver('discord')->redirect(); } /** * Obtain the user information from Discord. * * @return \Illuminate\Http\Response */ public function handleProviderCallback() { $user = Socialite::driver('discord')->user(); // $user->token; } }
作用域
Discord 支持多种作用域,当以用户身份进行身份验证时。您可以在以下位置找到列表: https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes
当以身份验证请求额外的作用域时,您可以在重定向之前使用 scopes
方法
return Socialite::driver('discord') ->scopes(['guilds', 'messages.read']) ->redirect();
以机器人身份进行身份验证
Discord 允许您向公会(服务器)添加“机器人”。这是一个修改后的 OAuth 流程,您将被重定向到 Discord 以确认您想要添加机器人的公会。在授权请求时,没有将您重定向回您应用程序的重定向。
您可以通过在重定向之前使用 bot
方法以机器人身份进行身份验证
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Laravel\Socialite\Facades\Socialite; class DiscordController extends Controller { /** * Redirect the user to the Discord authentication page. * * @return \Illuminate\Http\Response */ public function redirectToProvider() { return Socialite::driver('discord')->bot()->redirect(); } }
如果您知道您希望添加机器人到哪个公会 ID,您可以使用 guild
方法指定它
return Socialite::driver('discord') ->bot() ->guild($guildId) ->redirect();
此外,您还可以禁用公会选择
return Socialite::driver('discord') ->bot() ->guild($guildId) ->disableGuildSelect() ->redirect();
注意:如果您尝试禁用公会选择而没有指定公会,则该软件包将抛出 GuildRequiredException
实例。
问题
如果您在使用此软件包时遇到任何问题,请在 GitHub 存储库 上打开一个问题。