Skip to content

Instantly share code, notes, and snippets.

@afiqiqmal
Last active January 12, 2024 03:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save afiqiqmal/e65451c1eb0c4121fd3f07e305de21c2 to your computer and use it in GitHub Desktop.
Save afiqiqmal/e65451c1eb0c4121fd3f07e305de21c2 to your computer and use it in GitHub Desktop.
Example usage of Socialite with one Controller in Laravel
<?php
return = [
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_CALLBACK_URL'),
],
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_CALLBACK_URL'),
],
];
<?php
namespace App\Http\Controllers;
use App\Traits\SocialUsers;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
class SocialController extends Controller
{
use SocialUsers;
/**
* Redirect the user to the Google authentication page.
*
* @param Request $request
* @param $provider
* @return Response
*/
public function redirectToProvider(Request $request, $provider)
{
return Socialite::driver($provider)->redirect();
}
/**
* Obtain the user information from Google.
*
* @param Request $request
* @param $provider
* @return Response
*/
public function handleProviderCallback(Request $request, $provider)
{
$user = Socialite::driver($provider)->user();
return $this->checkUser($user, $provider);
}
public function logout()
{
return $this->userLogout();
}
}
<?php
namespace App\Traits;
use App\User;
trait SocialUsers
{
private function getUserImage($user, $provider)
{
if ($provider == "google") {
return $user->getAvatar()."0";
}
return $user->avatar;
}
public function checkUser($socialiteUser, $provider)
{
$user = User::where('email', $socialiteUser->email)->first();
if (!$user) {
return redirect()->route('login')->withErrors(\Lang::get('auth.user_not_registered'));
} else {
// update details
$user->profile_image_path = $this->getUserImage($socialiteUser, $provider);
$user->save();
\Auth::login($user); // manually authorize the user
return redirect()->route('dashboard'); // redirect to home page
}
}
public function userLogout()
{
session()->flush();
\Auth::logout();
return redirect('/');
}
}
Route::prefix('auth')->group(function () {
Route::get('provider/{provider}', 'SocialController@redirectToProvider')->name('social.login');
Route::get('provider/{provider}/callback', 'SocialController@handleProviderCallback');
});
@xmhafiz
Copy link

xmhafiz commented Nov 30, 2017

great, but you missed the config and .env files example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment