3分鐘短文:為了你少跳坑,Laravel寫好了使用者授權

程式設計師小助手發表於2020-10-16

引言

為了留存使用者,我們會想盡辦法獲取使用者的註冊,並將其留在應用內。

laravel開發好了一部分使用者註冊和登陸的程式碼,如果圖省事不要二次開發的,

拿來用就可以了。而如果要深度定製使用者許可權的開發者,也非常有必要了解使用者和授權相關的內容。

img

本期為大家說一說使用者註冊和登陸的功能。

users資料表

使用者的資料和資訊必然在資料庫內,所以laravel自帶了User模型,在 app/User.php 檔案內,

內部程式碼宣告瞭必要的部分:

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;
    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

大家可能會注意到,這個模型檔案與我們之前介紹的 Model 模型差別非常大,因為其直接繼承了 Illuminate\Foundation\Auth\User 類,

我們接著追溯該類的內容:

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

原來在此處,User 類不僅繼承了Model模型類,還實現了很多個與許可權相關的介面類。

  • AuthenticatableContract 用於識別使用者身份和token等
  • AuthorizableContract 用於定義使用者是否有某些許可權
  • CanResetPasswordContract 用於修改密碼

這些內容,我們其他章節再詳細講解。

有了模型還沒有資料庫表,這個模型除了能處理邏輯,一點資料都拿不到。所以第一步我們要把資料庫遷移完成。

來看一下預設的users表的遷移檔案 2014_10_12_000000_create_users_table.php 的內容,還是我們之前無數次強調過的,先實現 up 方法用於遷移表格:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

還有一個是回滾遷移使用的 down 方法:

public function down()
{
    Schema::dropIfExists('users');
}

遷移回滾的時候,如果users表建立成功了,就將其刪除。

在命令列執行遷移指令:

php artisan migrate

執行成功後使用mysql客戶端連線資料庫,列印users表結構,如下圖:

pic

登陸註冊

有了users表的資料支援,還有laravel內建的使用者邏輯,我們可以很方便地擁有一個登陸和註冊的頁面。

在命令列執行指令:

php artisan make:auth

這是一個腳手架指令,直觀地可以看到首頁登陸多了 LGOIN, REGISTER 導航按鈕。還有在 ** resources/views/auth** 目錄內,

建立了預設的檢視檔案。

看一下路由檔案 routes/web.php ,多了一行程式碼:

Auth::routes();

這個就跟我們使用 Route::resource() 方法會預設建立restfulapi需要的所有控制器方法一樣,這個 Auth::routes() 所包含的內容,

都是跟使用者註冊登入,忘記密碼,重置密碼等等息息相關的。

預註冊的路由如下圖:

p

這洋洋灑灑的路由和控制器方法,如果我們自己設計,那得費多少時間?這下好,拿來直接用了。要不說laravel真香呢!

下面是預設的註冊前端頁面。

p

寫在最後

本文介紹瞭如何使用laravel自帶的users表所關聯的使用者授權功能,

可以說是一個具有使用者功能的應用程式的基石,我們後面的文章會著重深入介紹。

Happy coding :-)

我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者

本作品採用《CC 協議》,轉載必須註明作者和本文連結
write-less-do-more-make-you-out-of-door

相關文章