引言
為了留存使用者,我們會想盡辦法獲取使用者的註冊,並將其留在應用內。
laravel開發好了一部分使用者註冊和登陸的程式碼,如果圖省事不要二次開發的,
拿來用就可以了。而如果要深度定製使用者許可權的開發者,也非常有必要了解使用者和授權相關的內容。
本期為大家說一說使用者註冊和登陸的功能。
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表結構,如下圖:
登陸註冊
有了users表的資料支援,還有laravel內建的使用者邏輯,我們可以很方便地擁有一個登陸和註冊的頁面。
在命令列執行指令:
php artisan make:auth
這是一個腳手架指令,直觀地可以看到首頁登陸多了 LGOIN, REGISTER 導航按鈕。還有在 ** resources/views/auth** 目錄內,
建立了預設的檢視檔案。
看一下路由檔案 routes/web.php ,多了一行程式碼:
Auth::routes();
這個就跟我們使用 Route::resource() 方法會預設建立restfulapi需要的所有控制器方法一樣,這個 Auth::routes() 所包含的內容,
都是跟使用者註冊登入,忘記密碼,重置密碼等等息息相關的。
預註冊的路由如下圖:
這洋洋灑灑的路由和控制器方法,如果我們自己設計,那得費多少時間?這下好,拿來直接用了。要不說laravel真香呢!
下面是預設的註冊前端頁面。
寫在最後
本文介紹瞭如何使用laravel自帶的users表所關聯的使用者授權功能,
可以說是一個具有使用者功能的應用程式的基石,我們後面的文章會著重深入介紹。
Happy coding :-)
我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者
本作品採用《CC 協議》,轉載必須註明作者和本文連結