Kredit: Den här artikeln är inspirerad av detta inlägg Laravel Social Authentication with Socialite
Vill du implementera socialt inloggningssystem på din Laravel-webbplats? Genom att tillåta social inloggning behöver dina användare inte registrera sig på din webbplats. Det sparar oss också mycket arbete som att skicka aktiveringslänk, verifierar e-postkonto. I den här artikeln studerar vi hur man lägger till socialt inloggningssystem med Laravel socialite.
Laravel Socialite- biblioteket tillhandahåller OAuth-autentisering med Facebook, Twitter, Google, LinkedIn, GitHub och Bitbucket. Vad vi behöver göra är att installera det här biblioteket på vår Laravel-webbplats, konfigurera det, få API-nycklar från en social webbplats och vi är klara.
Skapa användartabell
För att implementera socialt inloggningssystem måste vi skapa en användartabell som lagrar informationen från den sociala webbplatsen.
Om du har en ny installation av en Laravel öppnar du kommandoradsverktyget i ett projekts rotkatalog och kör kommandot php artisan make:auth
. Detta kommando skapar autentiseringsstyrenheter som LoginController, RegisterController, etc. som finns i katalogen app / Http / Controllers / Auth. Det skapar också en vyer login.blade.php, register.blade.php under katalogen resources / view / auth.
Öppna sedan tabellen för migrering för användare. Vi kommer att ändra denna standardmigrering och lägga till ytterligare två kolumner som heter provider och provider_id.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->nullable();
$table->string('password')->nullable();
$table->string('provider');
$table->string('provider_id');
$table->rememberToken();
$table->timestamps();
});
}
Som du ser ställer vi in e-post- och lösenordskolumner till ogiltiga. Varför? När vi använder social inloggningsautentisering finns det ingen garanti för att få ett e-post-ID för en användare. Och lösenordet är inte heller nödvändigt i sådana fall. Så vi behåller e-post och lösenord till ogiltiga. Kolumnleverantören lagrar sociala webbplatsnamn som facebook, twitter etc. Kolumnleverantör_id kommer att lagra det sociala id för en användare som motsvarar den sociala webbplatsen.
När du har ändrat din användarmigrering enligt ovan kör du kommandot php artisan migrate
. Det skapar en tabell som heter ‘användare’ i din databas.
Förmodligen, när du kör migreringskommandot kommer du att få några konstiga fel relaterade till teckenlängd. Om så är fallet öppnar du filen AppServiceProvider.php från appen / leverantörskatalogen. I den här filen måste vi ställa in standardstränglängd för en databastabellkolumner.
Fila AppServiceProvider.php
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(255);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
Användarmodell
Som standard inkluderar Laravel en AppUser Eloquent-modell i din appkatalog. Öppna User.php från appmappen. Lägg till ytterligare två kolumner, provider_id till variabeln $ fillable.
protected $fillable = [
'name', 'email', 'password', 'provider', 'provider_id',
];
Installera och konfigurera Laravel Socialite
För att installera detta bibliotek bör du ha kompositören installerad på ditt system.
I kommandoradsverktyget kör du kommandot nedan.
composer require laravel/socialite
Efter att ha installerat biblioteket registrerar du LaravelSocialiteSocialiteServiceProvider i din konfigurationsfil config / app.php.
'providers' => [
// Other service providers...
LaravelSocialiteSocialiteServiceProvider::class,
],
I samma fil config / app.php, under alias array, lägg till Socialite facade.
'Socialite' => LaravelSocialiteFacadesSocialite::class,
Nu är det dags att registrera din ansökan på en social webbplats. Vi antar till exempel att du vill implementera Facebook-inloggningsautentisering. Så fortsätt och skapa en applikation på Facebook.
En gång är du redo med app-id, apphemlighet för din Facebook-applikation, öppnar filen config / services.php och lägger till koden nedan.
'facebook' => [
'client_id' => env('FB_APP_ID'),
'client_secret' => env('FB_APP_SECRET'),
'redirect' => env('FB_CALLBACK_URL'),
],
Som visas i ovanstående kod måste vi lagra vår applikationsinformation och återuppringnings-URL i .env-filen.
FB_APP_ID=PASTE_APP_ID_HERE
FB_APP_SECRET=PASTE_APP_SECRET_HERE
FB_CALLBACK_URL=YOU_SITE_URL/login/facebook/callback
Vi har skickat återuppringnings-URL som YOU_SITE_URL / inloggning / facebook / återuppringning. Nu är det dags att skapa två rutter, en för att omdirigera användaren till OAuth (i vårt fall Facebook) -leverantör och en annan för att ta emot återuppringning från leverantören efter autentisering.
Faktisk kod för hantering av OAuth
I det här skedet är vi klar med alla inställningar för Laravel Socialite. Det är dags att skriva lite kod som hanterar omdirigering OAuth och hämta användarinformation.
Öppna din login.blade.php-fil och placera nedanstående kod i den troligen efter skicka-knappen.
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
Login with
<a href="{{ url('/login/facebook') }}"><i class="fa fa-facebook-official" aria-hidden="true"></i> Facebook</a>
<a href="{{ url('/login/twitter') }}"><i class="fa fa-twitter" aria-hidden="true"></i> Twitter</a>
<a href="{{ url('/login/github') }}"><i class="fa fa-github" aria-hidden="true"></i> Github</a>
</div>
</div>
Här lägger vi till en länk för Github och Twitter. Stegen för att lägga till OAuth för dessa sociala webbplatser också samma som Facebook. Du behöver bara skapa en applikation på respektive sociala webbplatser och lagra dessa detaljer på samma sätt som vi lade till för Facebook.
Definiera rutterna i din ruttfil enligt nedan.
Route::get('login/{provider}', 'AuthLoginController@redirectToProvider');
Route::get('login/{provider}/callback', 'AuthLoginController@handleProviderCallback');
Navigera sedan till app / Http / Controllers / Auth / LoginController.php och ändra filen. Du bör lägga till koden nedan i den.
<?php
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateFoundationAuthAuthenticatesUsers;
use Socialite;
use AppUser;
use Auth;
class LoginController extends Controller
{
/**
* Redirect the user to the GitHub authentication page.
*
* @return Response
*/
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->scopes(['email'])->redirect();
}
/**
* Obtain the user information from GitHub.
*
* @return Response
*/
public function handleProviderCallback($provider)
{
$user = Socialite::driver($provider)->user();
$authUser = $this->findOrCreateUser($user, $provider);
Auth::login($authUser, true);
return redirect($this->redirectTo);
}
/**
* If a user has registered before using social auth, return the user
* else, create a new user object.
* @param $user Socialite user object
* @param $provider Social auth provider
* @return User
*/
public function findOrCreateUser($user, $provider)
{
$authUser = User::where('provider_id', $user->id)->first();
if ($authUser) {
return $authUser;
}
return User::create([
'name' => $user->name,
'email' => $user->email,
'provider' => $provider,
'provider_id' => $user->id
]);
}
}
Metoden redirectToProvider omdirigerar användare till inloggningssidan på en social webbplats. När användaren har godkänt applikationen hämtar vi användarinformation i funktionshandtaget ProviderCallback. Om användaren inte finns med vårt system lägger vi till deras information med metoden findOrCreateUser.
Vi hoppas att du fick veta om sociala inloggningssystem med Laravel Socialite. Om du har några frågor eller förslag, vänligen lämna en kommentar nedan.
relaterade artiklar
- Hur man använder Laravel Multiple Database Connections-funktionen på en webbplats
- Skapa flerspråkig webbplats i PHP med hjälp av Laravel Framework