martinbean / socialite-discord-provider
A Discord provider for Laravel Socialite.
Installs: 22 251
Dependents: 0
Suggesters: 0
Security: 0
Stars: 25
Watchers: 1
Forks: 6
Open Issues: 2
Requires
- facade/ignition-contracts: ^1.0
- laravel/socialite: ^4.0|^5.0
This package is auto-updated.
Last update: 2024-10-29 06:11:50 UTC
README
A provider for Laravel Socialite that allows authentication as a Discord user or bot.
Installation
composer require martinbean/socialite-discord-provider:^1.2
Usage
The package registers a Socialite driver with the name of discord
.
Before using the driver, create an OAuth application in Discord’s developer portal: https://discord.com/developers/applications
Set your client ID and client secret as environment variables, and then reference them in your config/services.php file. You will also need to add a redirect URL to your application if you intend to authenticate as a user.
<?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', ], ];
The redirect
value will need to match a redirect URL in your Discord application settings. It can be relative as above.
Authenticating as a user
Create a controller to redirect and handle the access token callback:
<?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; } }
Scopes
Discord supports various scopes when authenticating as a user. You can find a list here: https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes
To request additional scopes when authenticating, you can use the scopes
method before redirecting:
return Socialite::driver('discord') ->scopes(['guilds', 'messages.read']) ->redirect();
Authenticating as a bot
Discord allows you to add “bots” to guilds (servers). This is a modified OAuth flow, where you are redirected to Discord to confirm the guild you wish to add a bot to. There is no redirect back to your application when you authorize the request.
You can authenticate as a bot by using the bot
method before redirecting:
<?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(); } }
If you know the guild ID you wish to add your bot to, you may specify it with the guild
method:
return Socialite::driver('discord') ->bot() ->guild($guildId) ->redirect();
Additionally, you can disable the guild select:
return Socialite::driver('discord') ->bot() ->guild($guildId) ->disableGuildSelect() ->redirect();
Note: if you try and disable guild selection without specifying a guild, the package will throw a GuildRequiredException
instance.
Issues
If you have any problems using this package, please open an issue on the GitHub repository.