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

2020-10-17 程式設計師小助手

引言

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

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領域原創作者

相關焦點

  • 3分鐘短文:太爽了,用Laravel寫API接口!
    引言我們一直在講,通過路由傳達到控制器,處理好數據並渲染到視圖,但是對於現代的應用, 前後端分離的情況下,後端寫個接口就完事兒了。本期為大家說一說用laravel寫restful風格的API,看看能有多簡單。以路由開端寫API接口,與傳統的渲染前端模板頁面有什麼區別?
  • 3分鐘短文:太爽了,用Laravel寫API接口
    引言我們一直在講,通過路由傳達到控制器,處理好數據並渲染到視圖,但是對於現代的應用, 前後端分離的情況下,後端寫個接口就完事兒了。以路由開端寫API接口,與傳統的渲染前端模板頁面有什麼區別?少了視圖,只需要準備好數據, 並按照規則格式化,返回就可以了。
  • 3分鐘短文 | Laravel 用戶授權原來內置了這麼多方法
    引言laravel已經內置了一套授權和權限分配的功能,我們不用從零開始設計,這方便了很多。但是, 因為集成在框架內的緣故,很多時候對於用戶體系甚至有些陌生。本文通過一個簡單的需求,判斷有效用戶, 逐一為大家實現。
  • 3分鐘短文|Laravel 用戶授權原來內置了這麼多方法
    引言laravel已經內置了一套授權和權限分配的功能,我們不用從零開始設計,這方便了很多。但是, 因為集成在框架內的緣故,很多時候對於用戶體系甚至有些陌生。本文通過一個簡單的需求,判斷有效用戶, 逐一為大家實現。
  • 3分鐘短文:Laravel Form讓你不再寫HTML的好庫
    引言作為後端工程師的你,是不是面對一堆JS,CSS感覺無比抓狂。如果能擺脫大量的冗餘的HTML代碼塊, 那該多好啊。laravel作為擴展性極強的框架,自然是為廣大後端開發者賦能。接著我們為input輸入框添加一個標籤,用於提示給用戶該欄位的用途。
  • 3分鐘短文:Laravel路由加模型等於?
    引言上一章我們用3分鐘時間光速入門了laravel控制的用法,本章不準備說控制器了,說一說另外倆模塊,就是路由Route和模型Model代碼時間還是最早我們講的那種方式,在路由地址上通過位置參數綁定,我們可以獲取到用戶輸入的數據。只不過,為了與模型文件對應起來,可以直接在路由處理方法的閉包內調用模型方法,並組裝數據返回。
  • 3分鐘短文:Laravel跟用戶打交道,從拿他們的數據開始
    而laravel是偏重後端的,所以為了給後端的開發同學緩衝的時間,我們跳過視圖,先來說說用戶數據的獲取和處理,這幾乎是任何應用必備之功能。本文不會教你規避危險!代碼時間我們在講路由規劃的時候,說了如何使用url的位置參數綁定的方式進行導向,其實那也是一種獲取用戶輸入數據的方式, 只不過,傳入的位置參數一般都人畜無害,公開訪問,任你來來往往。
  • 3分鐘短文:膽兒真肥!Laravel在命令行問用戶要數據
    引言上一章我教會大家如何在3分鐘的時間,通過laravel躋身geek之列(聽一下就好[捂嘴.jpg])。實現了一個簡單的命令行,和一個複雜的發送郵件通知的功能。所以本文教你改造命令行,做一個標準的應用程式。
  • 3分鐘短文:Laravel slug,讓你的url地址更好記
    而友好的url地址更是能讓人一目了然,增加用戶的好感。同時對於爬蟲也是好的示例,搜尋引擎可以友好地展開工作了。在早期的網際網路時代,為了在頁面之間傳遞數據,複雜的交互一般都會使用cookie等本地緩存,但是瀏覽器版本的約束,使得伺服器端交互仍然需要即時訪問。所以各種各樣的url地址,帶參數跳轉的,表單提交的,混為一談,製作出符合統一規範的路由很不容易。
  • 3分鐘短文:Laravel控制器用法光速入門
    >本文用最簡單的示例,讓你明白laravel中控制器是幹什麼的,以及怎麼用。沒有什麼可寫的,我們就寫個 hello world 練練手吧:public function home(){ return 'Hello, World!
  • 3分鐘短文:十年窖藏,Laravel告訴你表單驗證的正確姿勢
    本文教你正確地驗證用戶表單提交的數據僅指定欄位可以寫入,但是寫什麼值沒有過濾,是不是缺了一大塊。用戶的輸入從來都不能直接拿來用,我要做一個關卡,層層把關,有效的數據放進去,無效的數據擋在門外。重要的是那些驗證規則,我來逐一為你解讀。驗證規則內使用的都是laravel內置寫好了的規則,拿來即用。
  • 3分鐘短文:使用Laravel實現一個最簡單的web靜態頁面
    為了方便創建,先全局安裝 laravel installer, 在命令行中運行下面的指令:composer global require laravel/installer安裝成功後,laravel 二進位文件就會註冊到環境變量,在命令行中查看安裝是否成功
  • 3分鐘短文:Laravel模型讀數據的那個「障眼法」
    laravel模型的精巧設計使得我們操作數據層邏輯更加得心應手。laravel框架繼承了廣泛使用穩定可靠的 Carbon 類庫用於操作日期時間。為了測試方便,我們不需要寫額外的代碼,直接使用 tinker 命令行交互工具,在命令行輸入:tinker進入交互界面,然後我們使用模型查詢一條 events 表的數據,並訪問其屬性:namespace
  • 3分鐘短文 | Laravel 內3種數據校驗的寫法,你喜歡哪一個?
    引言web應用程式公開訪問幾乎沒有不帶用戶交互的,難免要接收用戶輸入的奇奇怪怪的東西。對於後端程序,必須對輸入的內容進行有效性過濾。在第一個規則下,驗證了names欄位必須為array類型,且長度至少為3。接著使用星號匹配數組內元素,要求都是string字符串,且不得重複 distinct,且每個字符串長度最小為3。laravel 5.5 以後的版本,你無需手動實例化 Validaor 對象,可以在 Request 對象直接調用 validate 方法實現。
  • 3分鐘短文:有趣的Laravel命令行交互,輸入和輸出
    引言上一期我們詳細演示了laravel生成的命令行的參數和選項的區別。 然而數據獲取的方式有很多,還有一些命令行應用程式,需要我們在程序執行的過程中, 實時地獲取用戶的輸入值。當然如果你覺得輸入0,1,2,3這樣的序列化數字實在是太累了,也可以為數組傳入關聯值:$winner = $this->choice(&39;,[&39; => &39;, &39; => &39;],&39;);
  • 3分鐘短文:刀刃向內,Laravel緩存測試簡單入門
    引言程式設計師很難發現自己寫的bug,這是一條難破的檻。所以要寫測試,要讓自己的程序給別人測試, 思路不同,實現方法不同,才能發現業務邏輯中的不合理和bug。很多時候測試路由要求必須有真是的文件存在,比如對於用戶,我們要求其必須有一個頭像文件。 laravel使用了Faker庫用於偽數據的生成,我們通過一個工廠方法,實現為每個用戶創建頭像的需求。
  • 3分鐘短文:說說Laravel通用緩存Cache的使用技巧
    引言前一期我們介紹了存儲用戶會話數據到伺服器,並通過框架提供的Session類 進行數據讀寫操作的方法。但是有些數據,如資料庫集合,API接口等等,對於全局的用戶來說是無差別的, 這時候我們需要全局緩存以便提供給所有的用戶使用。
  • 3分鐘短文:說說Laravel通用緩存Cache的使用技巧
    , 這時候我們需要全局緩存以便提供給所有的用戶使用。所以,你看到Session Cache Cookie 這些緩存數據類,基本上除了底層的驅動, 數據結構,過期特性等等,都集成了系統數組類Arr的操作方法。所以上述三種緩存在 操作方法上有很多相同之處。
  • 3分鐘短文 | Laravel 根據關聯模型條目數量排序,怎麼做?
    學習時間我們用實例進行解釋,首先是表結構,為了簡化操作,只羅列出主要的欄位。,基礎數據已經建立,接著我們使用laravel的模型操作資料庫表。如果你的數據量很大,動輒幾十萬條,那麼上面的 get 方法,萬萬是不能用的,這會大大地增加MySQL與伺服器之間的數據傳輸壓力。 所以,我們需要在MySQL層面,儘量解決這個問題。聚合查詢也是關係型資料庫的強項,所以我們需要的是把聚合查詢用laravel實現出來。
  • 3分鐘短文|Laravel命令行調用控制器方法,你會幾個?
    引言有時候為了不重寫代碼,避免冗餘無用重複的代碼在程序內到處都是。我們總是想方設法 把寫過的邏輯拿過來使用。php index.php --uri=controller/method/var1/var2要知道國內號稱用途最廣的thinkphp都已經這樣用了,laravel可落後乎?當然不可。於是我們想,既然laravel提供了artisan的命令行調用,何不先做一個命令,然後在命令內使用程序方法 調用控制器呢。說來就動手開寫。