Skip to content

Instantly share code, notes, and snippets.

@bosunski
Last active September 30, 2018 21:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bosunski/14c2028836de9daf8df50f00dcb40a54 to your computer and use it in GitHub Desktop.
Save bosunski/14c2028836de9daf8df50f00dcb40a54 to your computer and use it in GitHub Desktop.
2018-09_How_to_use_multiple_callbacks_in_Laravel_Socialite.blade
FACEBOOK_CLIENT_ID=693724864165765
FACEBOOK_CLIENT_SECRET=90d9ddf7dd76aa7a3dfac90b433c4273
FACEBOOK_CLIENT_CALLBACK=/login/facebook/callback
<?php
return [
//...
'facebook' => [
'client _id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CLIENT_CALLBACK'),
],
// ...
];
<?php
// SocialLoginController.php
// ...
public function redirectToProvider($provider)
{
Socialite::driver($provider)->redirect();
}
//...
<?php
// SocialLoginController.php
// ...
public function handleProviderCallback()
{
$user = Socialite::driver($provider)->user();
return $user;
}
// ...
<?php
// routes.php
Route::get('login/{provider}', 'SocialLoginController@redirectToProvider')->name('socialLogin');
Route::get('login/{provider}/callback', 'SocialLoginController@handleProviderCallback')->name('socialLoginCallback');
<?php
// routes.php
Route::get('login/{provider}', 'SocialLoginController@redirectToProvider')->name('socialLogin');
Route::get('login/{provider}/callback', 'SocialLoginController@handleProviderCallback')->name('socialLoginCallback');
Route::get('register/{provider}', 'SocialRegisterationController@redirectToProvider')->name('socialRegister');
Route::get('register/{provider}/callback', 'SocialRegisterationController@handleProviderCallback')->name('socialRegisterCallback');
<?php
// config/services.php
'facebook' => [
'client _id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CLIENT_CALLBACK'),
],
// ...
<?php
// SocialLoginController.php
namespace App\Http\Controller;
use App\Traits\CanBuildSocialProvider;
class SocialLoginController extends Controller
{
use CanbuildSocialProvider;
public function redirectToProvider($provider)
{
$this->provider = $provider;
$redirectUrl = '/login/facebook/callback';
return $this->buildSocialProvider($redirectUrl)->redirect();
}
public function handleProviderCallback($provider)
{
$this->provider = $provider;
$redirectUrl = '/login/facebook/callback';
$user = $this->buildSocialProvider($redirectUrl)->user();
// Do login processing
}
}
<?php
// SocialRegistrationController.php
namespace App\Http\Controller;
use App\Traits\CanBuildSocialProvider;
class SocialLoginController extends Controller
{
use CanbuildSocialProvider;
public function redirectToProvider($provider)
{
$this->provider = $provider;
$redirectUrl = '/register/facebook/callback';
return $this->buildSocialProvider($redirectUrl)->redirect();
}
public function handleProviderCallback($provider)
{
$this->provider = $provider;
$redirectUrl = '/register/facebook/callback';
$user = $this->buildSocialProvider($redirectUrl)->user();
// Do registration processing
}
<?php
namespace App\Traits;
use Laravel\Socialite\Facades\Socialite;
use Laravel\Socialite\Two\ProviderInterface;
trait CanBuildSocialProvider {
/**
* Creates an Instance of a Provider with config
*
* @param string|null $redirectUrl
*
* @return ProviderInterface
*/
public function buildSocialProvider(string $redirectUrl = null): ProviderInterface
{
$providerClass = ucfirst($this->provider);
$provider = strtoupper($this->provider);
$config = [
'client_id' => env($provider . '_CLIENT_ID'),
'client_secret' => env($provider. '_CLIENT_SECRET'),
'redirect' => $redirectUrl,
];
return Socialite::buildProvider('\Laravel\Socialite\Two\\' . $providerClass . 'Provider', $config);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment