1. 程式人生 > >最適合入門的Laravel中級教程(二)用戶認證

最適合入門的Laravel中級教程(二)用戶認證

命令 基本 tle 推薦 如果 index redirect dump resources

之前的初級教程主要是學習簡單的增刪改查;
接著的中級教程的目標是在初級教程的基礎上能寫出更復雜更健壯的程序;
我們先來學習 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 屬性;

技術分享圖片


甚至如果需要根據登錄的用戶的角色跳轉到不同的頁面;

Laravel 還預留了 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中級教程(二)用戶認證