Laravel是一種流行的PHP框架,用于開發Web應用程序。其中一個最常見的功能是在應用程序中集成第三方登錄。這樣做可以為用戶提供更好的用戶體驗,減少注冊重復流程。
在本文中,我們將討論如何使用Laravel Socialite庫集成第三方登錄。
什么是Laravel Socialite?
Laravel Socialite是Laravel框架的一個擴展包,它允許開發人員在應用程序中輕松實現第三方登錄。它支持各種社交平臺,如Facebook,Twitter,LinkedIn等。
Socialite如何工作?
Socialite遵循OAuth協議。 OAuth是一種授權框架,它允許用戶將其帳戶信息從一個站點傳遞到另一個站點,而無需共享其憑據。 OAuth需要用戶授權,在這種情況下,用戶將授權應用程序訪問其社交媒體帳戶。
Socialite授權工作原理如下:
用戶單擊“登錄”按鈕,該按鈕將指向Socialite授權:
Route::get('auth/{provider}', 'AuthSocialController@redirectToProvider');
登錄后復制
Socialite挑戰用戶以授權訪問其社交媒體帳戶; Socialite將重定向到社交媒體站點;
Route::get('auth/{provider}/callback', 'AuthSocialController@handleProviderCallback');
登錄后復制
3.用戶授權自己的帳戶,社交媒體網站重定向到回調URL;
public function redirectToProvider($provider) { return Socialite::driver($provider)->redirect(); }
登錄后復制
Socialite將帶有授權代碼的回調URL返回應用程序,應用程序將用授權代碼請求OAuth訪問令牌;
public function handleProviderCallback($provider) { $socialUser = Socialite::driver($provider)->user(); }
登錄后復制完成認證,Socialite將返回用戶授權的令牌,并將其傳遞到應用程序中。
如何在Laravel中使用Socialite?
使用Socialite支持的任何社交媒體平臺,您需要在以下兩個地方設置應用程序憑據或密鑰:
'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') ]
登錄后復制
應用程序憑據或密鑰旨在驗證應用程序的身份。
我們將在config / services.php文件中進行此設置。
步驟1:創建授權路由
創建用于觸發Socialite授權的路由:
Route::get('auth/{provider}', 'AuthSocialController@redirectToProvider'); Route::get('auth/{provider}/callback', 'AuthSocialController@handleProviderCallback');
登錄后復制
通常將這些路由放置在一個名為SocialController的控制器中,該控制器用于處理Socialite授權和回調。
步驟2:創建SocialController
像所有控制器一樣,我們需要創建使用良好的代碼實踐的SocialController。
使用以下命令來創建控制器:
php artisan make:controller AuthSocialController
登錄后復制
最終,這將使我們可以使用授權提供程序進行授權并回調我們的路由。
在SocialController中,我們定義了兩個方法,redirectToProvider和handleProviderCallback。 第一個是重定向至授權提供程序。 隨后的回調函數則為具有授權代碼的客戶端檢索信息并完成身份驗證的客戶端提供回調URL。
以下是SocialController的示例代碼:
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(); } }
登錄后復制
步驟3:使用視圖控制器
通常,我們會使用視圖控制器來管理渲染我們的所有視圖。 這使我們的代碼更易于閱讀和管理。 讓我們使用Laravel的視圖控制器為我們的應用程序創建一個簡單的視圖。
使用以下命令來創建視圖控制器:
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'); } }
登錄后復制
步驟4:創建登錄視圖
現在我們的控制器和路由都已準備就緒。 現在我們需要創建用于登錄的視圖。
創建一個視圖文件并將其命名為social_login.blade.php。 我們需要顯示可以觸發第三方登錄的按鈕。 在這種情況下,我們將展示3個按鈕,以支持Google,Facebook和Twitter的登錄。
以下是視圖文件的示例代碼:
@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
登錄后復制
頂部使用布局文件。當用戶單擊任何按鈕時,我們將它們重定向到授權提供程序。 在SocialController respond中,我們將獲得用戶數據并完成身份驗證。
步驟5:創建新路由
現在我們需要創建新路由以處理上面的視圖文件。
修改web.php文件,如下所示:
Route::get('social', 'SocialAuthController@index')->name('social.login'); Route::get('social/{provider}', 'SocialAuthController@redirectToProvider')->name('social.oauth'); Route::get('social/{provider}/callback', 'SocialAuthController@handleProviderCallback');
登錄后復制
我們應該注意,上面的路由通過名稱進行標識,以便可以在控制器代碼中引用它們。
步驟6:測試
現在我們已經設置了我們的社交媒體標識,在測試應用程序之前,我們需要通過.env文件對我們的應用程序進行配置。
要配置.env文件,請添加以下代碼:
FACEBOOK_CLIENT_ID=xxxxxxxxxxxxxxxxx FACEBOOK_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx FACEBOOK_CALLBACK_URL=http://www.example.com/auth/facebook/callback GOOGLE_CLIENT_ID=xxxxxxxxxxxxxxxxx GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx GOOGLE_CALLBACK_URL=http://www.example.com/auth/google/callback TWITTER_CLIENT_ID=xxxxxxxxxxxxxxxxx TWITTER_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx TWITTER_CALLBACK_URL=http://www.example.com/auth/twitter/callback
登錄后復制
該行中用“xxxxxxxxxxxxxxxxx”替換實際的應用程序標識。 之后,我們可以通過命令行啟動我們的應用程序,并訪問上面的視圖文件。 一旦我們單擊任何按鈕并通過OAuth授權我們的帳戶,我們將以已知的每個用戶進行身份驗證。
結論
在本文中,我們學習了如何使用Laravel Socialite庫集成第三方登錄。 Socialite的主要目的是簡化社交媒體登錄流程,以提高用戶體驗。 我們學習了如何設置Socialite以支持Google,Facebook和Twitter。 我們還在控制器中檢索授權代碼,并使用請求的數據完成OAuth身份驗證。 該過程實際上將創建新帳戶或更新現有帳戶。
以上就是Laravel開發:如何使用Laravel Socialite快速集成第三方登錄?的詳細內容,更多請關注www.xfxf.net其它相關文章!