You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
 
 
 
 

61 lines
1.6 KiB

<?php
namespace App\Http\Controllers;
use Barryvdh\Debugbar\Facade;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use Illuminate\Support\Str;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Exception;
class SocialiteController extends Controller
{
protected $providers = [ "github", "kainoo-sso" ];
public function redirect($provider)
{
if(in_array($provider, $this->providers))
{
return Socialite::driver($provider)->redirect();
}
return response("", 404);
}
public function callback($provider)
{
if(in_array($provider, $this->providers))
{
$user = null;
try {
$user = Socialite::driver($provider)->user();
} catch(Exception $e) {
return redirect('/register')->withErrors([
"message" => "Failed to login with " . $provider
]);
}
$email = $user->getEmail();
$name = $user->getName();
$username = $user->getNickname();
$user = User::where("email", $email)->first();
if(!$user)
{
$user = User::create([
'name' => $name,
'email' => $email,
'username' => $username,
'password' => bcrypt(Str::Random(15)),
'email_verified_at' => Carbon::now()
]);
}
Auth::login($user);
if (Auth::check()) return redirect('/');
}
return response("", 404);
}
}