martinbean/socialite-discord-provider

为 Laravel Socialite 提供的 Discord 提供者。

1.2.0 2020-10-03 12:55 UTC

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 存储库 上打开一个问题。