最適合入門的Laravel中級教程(二)用戶認證
之前的初級教程主要是學習簡單的增刪改查;
接著的中級教程的目標是在初級教程的基礎上能寫出更復雜更健壯的程序;
我們先來學習 laravel 的用戶認證功能;
在現代網站中基本都有用戶系統;
而我們每開發一個網站就實現一遍用戶系統想想也是挺心累的;
還好 Laravel 已經貼心的幫我們完成了常用的用戶認證功能;
比如說 註冊、登錄、重置密碼;
並設計好了用戶表 users ;
編寫了帶有登錄登出功能的 Auth 類;
而且可以非常方便的進行擴展修改;
再個 Laravel 的用戶系統跟其他功能比如 Passport 等結合也很緊密;
因此墻裂推薦使用 Laravel 的用戶系統;
要使用用戶認證功能需要先運行命令行;
php artisan make:auth
Bash
Copy
通過 git 我們可以看到有這些文件發生了變化;
訪問下 登錄頁面看看效果 /login
;
開發項目的時候一般不會使用默認的頁面;
如果需要更改頁面結構或者樣式;
直接修改 resources/views/auth 目錄下對應的文件即可;
查看 web.php 可以發現增加了如下兩行;
Auth::routes();
Route::get(‘/home‘, ‘HomeController@index‘)->name(‘home‘);
PHP
Copy
執行 route:list
php artisan route:list
Bash
Copy
如果修改視圖文件已經不能滿足你的需求了;
我們還可以在 web.php 中定義路由來覆蓋上圖中的這些內容;
或者直接覆蓋控制器中的方法;
在成功註冊成功、登錄成功、重置密碼成功後默認都會重定向到 /home
頁面;
如果說想想在登錄成功後重定向到個人中心 /user
頁面;
我可以修改 app/Http/Controllers/Auth/LoginController.php 文件中的 $redirectTo
屬性;
甚至如果需要根據登錄的用戶的角色跳轉到不同的頁面;
redirectPath
方法; 只需要在 app/Http/Controllers/Auth/LoginController.php 中自定義
redirectPath
方法即可;
/**
* 可以根據邏輯判斷自定義跳轉鏈接
*/
public function redirectPath()
{
}
PHP
Copy
在國內很多時候我們都是選擇使用手機號登錄的;
那麽我們可以在 users 表中增加 phone 列;
然後參考圖中的 AuthenticatesUsers
trait 的 login
方法;
Auth 也提供了 attempt
方法用來認證用戶;
\Auth::attempt([‘phone‘ => ‘***‘, ‘password‘ => ‘123456‘])
PHP
Copy
當登錄成功後會向 session 中存儲登錄的用戶id ;
我們註冊一個用戶並登錄;
然後在 app/Http/Controllers/HomeController.php 的 index
中打印下 session 看下;
public function index()
{
dump(session()->all());
return view(‘home‘);
}
PHP
Copy
訪問 /home
頁面;
這個 login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d
明顯不是一個固定 key ;
我們如果想獲取登錄的用戶 id 可以通過下面這個方式;
$userId = Auth::id();
PHP
Copy
如果說想獲取包括用戶名等完整的用戶信息則可以這樣;
$user = Auth::user();
PHP
Copy
修改下 app/Http/Controllers/HomeController.php 的 index
再打印;
public function index()
{
dump(session()->all());
dump(\Auth::id());
dump(\Auth::user());
return view(‘home‘);
}
PHP
Copy
很多網站都是分成面向普通用戶的前臺和給管理員用的後臺的;
這種情況下我們可以自定義多套用戶體系 guard;
比如說我的博客就分為不需要註冊直接使用第三方平臺的 oauth 和不允許註冊的後臺管理 admin ;
auth.php
‘guards‘ => [
‘admin‘ => [
‘driver‘ => ‘session‘,
‘provider‘ => ‘users‘,
],
‘oauth‘ => [
‘driver‘ => ‘session‘,
‘provider‘ => ‘oauth‘,
],
],
‘providers‘ => [
‘users‘ => [
‘driver‘ => ‘eloquent‘,
‘model‘ => App\Models\User::class,
],
‘oauth‘ => [
‘driver‘ => ‘eloquent‘,
‘model‘ => App\Models\OauthUser::class,
],
],
PHP
Copy
guard 的用法可以參考我的博客源代碼; https://github.com/baijunyao/laravel-bjyblog
這裏就不多講了;
吸取初級教程的教訓;
中級教程一開始就把代碼按章節推送到 github 上供童鞋們參考;
鏈接在這裏: https://github.com/baijunyao/laravel-course
最適合入門的Laravel中級教程(二)用戶認證