Google’i sisselogimine Laravelis, kasutades teenust Laravel Socialite
Hiljuti avaldasin artikli Logi sisse LinkedIniga, kasutades Laraveli suhtlusvõrgustikku, ja üks meie lugejatest küsis Google Logi sisse Laraveli integreerimise kohta. Google’i sisselogimine on ka üks populaarsemaid platvorme, mida veebisaidil sotsiaalse sisselogimise jaoks kasutatakse.
Kui lubate kasutajatel oma veebisaidil oma sotsiaalse profiiliga sisse logida, jätate nende e-posti aadressi kinnitamise protsessi vahele. Teie kasutajad ei pea e-posti aktiveerimisprotsessi jälgima. Võime tugineda sotsiaalsetele saitidele, kuna nad on juba oma platvormil kasutajaid kinnitanud. See annab teie kasutajatele parema kasutuskogemuse, kuna neil pole vaja meeles pidada oma veebisaidi sisselogimisandmeid ja säästab teid ka kontrollivoo jaoks koodide lisamisest. See on olukord, kus võidavad kõik.
Selles artiklis uurime samm-sammult juhendit Google’i sisselogimise lisamiseks Laravelisse Laraveli suhtlusportaali abil. Laraveli seltskonnategelane tegeleb OAuthi vooga sotsiaalse sisselogimise jaoks kulisside taga. See pakett kiirendab sotsiaalse sisselogimise integreerimist Laraveli.
Selle õpetuse jaoks kasutan värsket Laraveli installi, nii et käivitage järgmine käsk, mis installib teie jaoks Laraveli:
composer create-project --prefer-dist laravel/laravel googlelogin
Laraveli installimisel looge andmebaas ja lisage .env
faili oma andmebaasi mandaadid. Kuna lisame rakendusse sotsiaalse sisselogimise, lisan kasutaja migreerimisfailile veel 2 veergu ja muutsin selle koodi veidi.
Avage oma kasutaja migratsioonifail ja lisage up
meetodile allolev kood .
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->string('provider');
$table->string('provider_id');
$table->rememberToken();
$table->timestamps();
});
}
Ülalolevas koodis olen lisanud 2 veergu provider
ja provider_id
mis hoiavad vastavalt väärtusi ‘google’ ja kasutaja Google’i profiili id. Looge kasutajate tabel, käivitades käsu migreerimine.
php artisan migrate
Need 2 veergu peate lisama ka kasutajamudelisse.
app / User.php
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'provider', 'provider_id',
];
Looge Google’i rakendus ja hankige oma volitused
Järgmisena peame looma projekti Google API-de konsoolil. Kasutajate jaoks OAuthi protsessi lõpuleviimiseks vajame rakenduse kliendi ID-d ja kliendisaladust.
Google’i projekti loomiseks ja volituste saamiseks järgige alltoodud samme. Õpetuse huvides kasutan kohaliku serveri URL-i. Saate seda URL-i oma nõuete järgi kohandada.
- Minge Google’i arendajakonsoolile.
- Klõpsake rippmenüül ja looge uus projekt, klõpsates nuppu (+). Teise võimalusena saate valida ka olemasoleva projekti.
- Valige projekti juhtpaneelil külgribalt Mandaadid.
- Klõpsake vahekaardi Mandaadid rippmenüül Loo mandaadid ja valige OAuthi kliendi ID.
- Valige rakenduse tüübist veebirakendus. Sisestage URL-i volitatud ümbersuunamise URL-id
http://localhost:8000/google/callback
.
Kui olete selle salvestanud, saate hüpikakna koos oma kliendi ID ja kliendisaladusega. Kopeerige need võtmed, mida vajame mõne hetkega.
Loo marsruudid ja kontroller
Olete oma API-võtmetega valmis. Nüüd tuleb edasi liikumiseks luua marsruudid, labafail ja kontroller. Looge LoginController
käsu abil:
php artisan make:controller LoginController
Pärast seda looge nimega labafail login.blade.php
ja lisage sellele allpool olev HTML.
<a href="{{ url('/login/google') }}">
{{ __('Login with Google') }}
</a>
Kutsuge seda vaadet index
meetodilt LoginController
.
public function index()
{
return view('login');
}
Selle vaate helistamiseks peate lisama selle marsruudi. Lisame veel mõned marsruudid, mis vajavad juhendaja järgmist osa.
Route::get('login', 'LoginController@index');
Route::get('login/{provider}', 'LoginController@redirectToProvider');
Route::get('{provider}/callback', 'LoginController@handleProviderCallback');
Route::get('/home', function() {
return 'User is logged in';
});
Pange tähele, et lisasin home
marsruudi. Kui kasutaja Google’iga sisse logib, suunan nad home
marsruudile. Hoian seda lihtsalt demo eesmärgil. Peaksite selle marsruudi millekski muuks muutma.
Google’i sisselogimine Laravelis, kasutades teenust Laravel Socialite
Siiani oleme sotsiaalse sisselogimise jaoks vajaliku põhiseadistusega valmis. Nüüd. on aeg installida Laraveli Socialite’i raamatukogu. Installige see, käivitades terminalis alloleva käsu.
composer require laravel/socialite
Teegi installimisel avage config/services.php
ja lisage Google’i konfiguratsioon järgmiselt:
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT_URL'),
],
Kuna me kasutasime env
volituste saamiseks meetodit, peame need volitused .env
faili lisama .
GOOGLE_CLIENT_ID=YOUR_CLIENT_ID
GOOGLE_CLIENT_SECRET=YOUR_CLIENT_SECRET
GOOGLE_REDIRECT_URL=http://localhost:8000/google/callback
Asendage kohatäited tegelike väärtustega. Lõpuks peame lisama LoginController.php
faili koodi, mis suunab kasutaja Google’i sisselogimislehele ja vastutasuks haldab vastust. Selles failis kirjutame funktsiooni, mis suunab kasutaja Google’i sisselogimislehele ja edukal autoriseerimisel sisestab see kasutajaandmed andmebaasi ja logib kasutaja sisse.
LoginController.php
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Socialite;
use AppModelsUser;
use Auth;
class LoginController extends Controller
{
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Call the view
*/
public function index()
{
return view('login');
}
/**
* Redirect the user to the Google authentication page.
*
* @return Response
*/
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
/**
* Obtain the user information from Google.
*
* @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
]);
}
}
Kontrollerifailis kontrollime, kas kasutaja provider_id
on juba olemas või mitte. Kui see on olemas, tagastage praegune kasutajaeksemplar, muidu sisestage see kasutajate tabelisse ja logige kasutaja sisse.
Loodan, et saite Socialite paketi abil teada Laraveli Google’i sisselogimisest. Tahaksin kuulda teie mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.