Laravel ialah rangka kerja PHP popular yang digunakan untuk membangunkan aplikasi web. Salah satu ciri yang paling biasa ialah penyepaduan log masuk pihak ketiga ke dalam aplikasi. Melakukannya boleh memberikan pengguna pengalaman pengguna yang lebih baik dan mengurangkan proses pendaftaran berulang.
Dalam artikel ini, kita akan membincangkan cara mengintegrasikan log masuk pihak ketiga menggunakan perpustakaan Laravel Socialite.
Apakah itu Laravel Socialite?
Laravel Socialite ialah pakej sambungan untuk rangka kerja Laravel yang membolehkan pembangun melaksanakan log masuk pihak ketiga dengan mudah dalam aplikasi mereka. Ia menyokong pelbagai platform sosial seperti Facebook, Twitter, LinkedIn, dll.
Bagaimana Socialite berfungsi?
Socialite mengikut protokol OAuth. OAuth ialah rangka kerja kebenaran yang membenarkan pengguna menghantar maklumat akaun mereka dari satu tapak ke tapak lain tanpa berkongsi bukti kelayakan mereka. OAuth memerlukan kebenaran pengguna, dalam hal ini pengguna membenarkan aplikasi untuk mengakses akaun media sosial mereka.
Keizinan Socialite berfungsi seperti berikut:
Pengguna mengklik butang "Log Masuk", yang akan menunjuk ke kebenaran Socialite:
Route::get('auth/{provider}', 'AuthSocialController@redirectToProvider');
Socialite mencabar pengguna untuk membenarkan akses ke akaun media sosial mereka; mengubah hala ke URL panggil balik;
Route::get('auth/{provider}/callback', 'AuthSocialController@handleProviderCallback');
Socialite akan mengembalikan URL panggilan balik dengan kod kebenaran kepada aplikasi dan aplikasi akan meminta token akses OAuth dengan kod kebenaran;
public function redirectToProvider($provider) { return Socialite::driver($provider)->redirect(); }
public function handleProviderCallback($provider) { $socialUser = Socialite::driver($provider)->user(); }
'facebook' => [ 'client_id' => env('FB_CLIENT_ID'), 'client_secret' => env('FB_CLIENT_SECRET'), 'redirect' => env('FB_CALLBACK_URL'), ] 'twitter' => [ 'client_id' => env('TW_CLIENT_ID'), 'client_secret' => env('TW_CLIENT_SECRET'), 'redirect' => env('TW_CALLBACK_URL'), ], 'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_CALLBACK_URL') ]
Route::get('auth/{provider}', 'AuthSocialController@redirectToProvider'); Route::get('auth/{provider}/callback', 'AuthSocialController@handleProviderCallback');
php artisan make:controller AuthSocialController
namespace AppHttpControllersAuth; use AppHttpControllersController; use IlluminateSupportFacadesAuth; use IlluminateHttpRequest; use LaravelSocialiteFacadesSocialite; class SocialController extends Controller { /** * Redirect the user to the OAuth Provider. * * @return IlluminateHttpResponse */ public function redirectToProvider($provider) { return Socialite::driver($provider)->redirect(); } /** * Obtain the user information from OAuth Provider. * * @return IlluminateHttpResponse */ public function handleProviderCallback($provider) { $user = Socialite::driver($provider)->user(); // Do something with user data, for example: // $user->token; // $user->getId(); // $user->getEmail(); } }
php artisan make:controller SocialAuthController
namespace AppHttpControllers; use IlluminateHttpRequest; class SocialAuthController extends Controller { /** * Redirect the user to the OAuth Provider. * * @return IlluminateHttpResponse */ public function redirectToProvider($provider) { return Socialite::driver($provider)->redirect(); } /** * Obtain the user information from OAuth Provider. * * @return IlluminateHttpResponse */ public function handleProviderCallback($provider) { $user = Socialite::driver($provider)->user(); $existingUser = User::where('email', $user->getEmail())->first(); if ($existingUser) { // If user already exists, login the user auth()->login($existingUser, true); } else { // Register new user $newUser = new User(); $newUser->name = $user->getName(); $newUser->email = $user->getEmail(); $newUser->google_id = $user->getId(); $newUser->password = encrypt('amitthakur'); $newUser->save(); auth()->login($newUser, true); } return redirect()->to('/home'); } }
@extends('layouts.app') @section('content') <main class="py-4"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Login') }}</div> <div class="card-body"> <a href="{{ route('social.oauth', ['provider' => 'google']) }}" class="btn btn-google">Sign in with google</a> <a href="{{ route('social.oauth', ['provider' => 'facebook']) }}" class="btn btn-facebook">Sign in with Facebook</a> <a href="{{ route('social.oauth', ['provider' => 'twitter']) }}" class="btn btn-twitter">Sign in with twitter</a> </div> </div> </div> </div> </div> </main> @endsection
Route::get('social', 'SocialAuthController@index')->name('social.login'); Route::get('social/{provider}', 'SocialAuthController@redirectToProvider')->name('social.oauth'); Route::get('social/{provider}/callback', 'SocialAuthController@handleProviderCallback');
Atas ialah kandungan terperinci Pembangunan Laravel: Bagaimana dengan cepat mengintegrasikan log masuk pihak ketiga menggunakan Laravel Socialite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!