在當今互聯網時代,用戶的登錄已經成為了絕大部分web應用必須要考慮的事情。這也意味著web應用需要為用戶提供可選擇的多重登錄方式,來降低用戶的登錄困難度和優化用戶體驗。
作為當前最受歡迎的PHP框架之一,laravel提供了一些非常方便的方式來實現用戶的身份驗證,其中Laravel Socialite是一個非常強大的用戶身份驗證解決方案,它允許應用使用第三方平臺作為身份驗證提供者。
在本文中,我們將介紹如何使用Laravel Socialite來實現Github登錄的功能。下面我們來逐步實現這個目標。
步驟1:創建Github應用
在開始本文之前,首先需要注冊和創建一個Github賬號,并且在Github中創建一個OAuth應用程序。創建應用的過程相對簡單,只需遵循以下幾個步驟:
- 登陸Github賬號,在 Github Settings -> Developer settings -> OAuth Apps頁面中創建新的OAuth App
-
在第一部分填寫App名稱、Homepage URL和Callback URL
Callback URL 即登陸成功后返回的Website地址,需要在Laravel網站后臺定義
- 提交表單后返回的頁面中會顯示Github應用程序的client_id和client_secret。client_id 將用于配置Laravel Socialite的Github驅動程序。
步驟2:安裝 Laravel Socialite
安裝 Laravel Socialite 可以通過Composer輕松完成。只需在項目目錄下的命令行中輸入以下指令即可:
composer require laravel/socialite
步驟3:配置服務提供者和 Facade 引用
打開 config/app.php 配置文件,找到 providers 數組和 aliases 數組,將 Socialite 服務提供者和 Facade 引用添加到對應的數組中。
'providers' => [ // Other service providers... LaravelSocialiteSocialiteServiceProvider::class, ], 'aliases' => [ // Other aliases... 'Socialite' => LaravelSocialiteFacadesSocialite::class, ],
步驟4:定義Github驅動配置
在 config/services.php 配置文件中添加以下配置:
'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => env('GITHUB_REDIRECT'), ],
步驟5:定義Github登錄鏈接
打開登錄頁面的 blade 模板文件,添加以下代碼:
<a href="%7B%7B%20url('auth/github')%20%7D%7D" class="btn btn-github"><i class="fa fa-github"></i> Github 登錄</a>
這將創建一個鏈接,通過訪問 /auth/github,將會跳轉到Github的登錄頁面。
步驟6:定義Github回調函數
打開我們在Github中注冊時的 Callback URL 頁面并獲取鏈接中的code參數,并在Laravel路由中添加以下代碼:
Route::get('auth/github/callback', function () { $user = Socialite::driver('github')->user(); // 如果在本地沒有找到該用戶,則創建新用戶 $existingUser = User::where('email', $user->getEmail())->first(); if ($existingUser) { auth()->login($existingUser, true); } else { $newUser = new User; $newUser->name = $user->getNickname(); $newUser->email = $user->getEmail(); $newUser->github_id = $user->getId(); $newUser->avatar = $user->getAvatar(); $newUser->provider = 'github'; $newUser->save(); auth()->login($newUser, true); } return redirect()->to('/home'); });
這里需要注意的是,我們需要將github_id保存在數據庫中以便需要時進行登錄驗證,同時也保存了用戶昵稱和頭像方便展示。
步驟7:創建.env文件
打開項目根目錄下的 .env 文件,添加以下 Github 相關配置:
GITHUB_CLIENT_ID=your-github-client-id-here GITHUB_CLIENT_SECRET=your-github-client-secret-here GITHUB_REDIRECT=http://localhost:8000/auth/github/callback
上述配置中,你需要將 your-github-client-id-here 和 your-github-client-secret-here 替換為你自己在Github獲取到的client_id和client_secret。GITHUB_REDIRECT的值應該是Github上注冊應用程序時的重定向URI參數。
好了,現在你可以嘗試用 Github 登錄來測試你的應用程序了。當你訪問 /auth/github 時,你應該被重定向到 Github 的登錄頁面。輸入你的 Github 賬號后,你應該會被重定向回到你通過 Callback URI 指定的地址。
使用 Laravel Socialite 確實是實現身份驗證的一種快速、簡便的方法,它還支持其他很多賬號認證服務提供商,如Facebook、Twitter、Google等等。舒適且高效的第三方登錄方式能夠極大地提升用戶的體驗,為Web應用添加多重登錄方式也逐漸成為了一種必要。相比起自己獨立實現一套認證系統,使用 Laravel Socialite 則可以利用現有的優秀的認證服務提供商來簡化身份驗證方案的實現。