. */ namespace App\Http\Controllers\Auth; use App\Facades\Discord; use App\Facades\Options; use App\Http\Controllers\Controller; use App\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Crypt; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use Laravel\Socialite\Facades\Socialite; use Laravel\Socialite\Two\InvalidStateException; class DiscordController extends Controller { public function discordRedirect() { return Socialite::driver('discord') ->scopes(['email', 'guilds.join', 'guilds.members.read', 'guilds']) ->redirect(); } public function discordCallback() { try { $discordUser = Socialite::driver('discord')->user(); } catch (InvalidStateException $stateException) { Log::warning('Invalid state for social authentication: ', [ 'message' => $stateException->getMessage(), 'ua' => request()->userAgent(), 'ip' => request()->ip() ]); return redirect(route('discordRedirect')); } $appUser = User::where('email', $discordUser->getEmail())->first(); if ($appUser) { $appUser->discord_token = $discordUser->token; $appUser->discord_refresh_token = $discordUser->refreshToken; $appUser->discord_user_id = $discordUser->getId(); $appUser->discord_pfp = $discordUser->getAvatar(); $appUser->save(); Auth::login($appUser, true); } else { $oAuthUser = User::create([ 'uuid' => null, 'name' => $discordUser->getName(), 'email' => $discordUser->getEmail(), 'email_verified_at' => now(), // verify the account since it came from a trusted provider 'username' => $discordUser->getNickname(), 'currentIp' => \request()->ip(), 'registrationIp' => request()->ip(), 'discord_user_id' => $discordUser->getId(), 'discord_pfp' => $discordUser->getAvatar(), 'discord_token' => $discordUser->token, 'discord_refresh_token' => $discordUser->refreshToken ]); $oAuthUser->assignRole('user'); Auth::login($oAuthUser, true); } if (session()->has('discordApplicationRedirectedSlug')) { return redirect(route('renderApplicationForm', ['vacancySlug' => session()->pull('discordApplicationRedirectedSlug')])); } return redirect() ->route('dashboard'); } }