婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Laravel框架自定義驗證過程實例分析

Laravel框架自定義驗證過程實例分析

熱門標簽:地圖標注怎么做商戶驗證 打開百度地圖標注 智能電銷語音機器人資訊 400 電話 辦理 亳州企業外呼系統 山東電銷卡外呼系統原理是什么 海南外呼系統方案 兼職做地圖標注好賺錢嗎 蘇州外呼系統有效果嗎

本文實例講述了Laravel框架自定義驗證過程。分享給大家供大家參考,具體如下:

首先,你需要明白一點,當你開啟auth中間件的時候,其實是調用了在app/Http/Kernel.php中的

'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

但是這里先不用去糾結這個文件,這里直接看開啟這個驗證之后會怎樣。首先,如果你去訪問開啟這個驗證的控制器,但是你又沒有登錄的話,那么會默認去搜索login路由,所以你需要在路由中設置該路由:

Route::get('login','AnyControllerName@AnyFunctionName')->name('login');

而且雖然name('login')可設可不設,但是最好加上。接著頁面就會跳轉到你設置的供用戶填寫表單的頁面,該表單的提交路由你也一樣要設置好:

Route::post('login','AnyControllerName@AnyFunctionName');

其實由于這里已經由我們可控了,即,我們可以手動確定表單提交到哪個控制器以及對應該控制器下的方法,所以接下來的問題就是如何使Laravel知道我們確定該用戶已經通過了驗證了。

這個時候可以使用Auth::attempt()函數,這個函數的作用原理是將你傳遞進去的數組,比如下面:

public function checkLogin(Request $request){
  $user_name=$request->user_name;
  $user_id=$request->user_id;
  $password=$request->password;
  Auth::attempt([
    'user_name'=>$user_name,
    'user_id'=>$user_id,
    'password'=>$password
  ]);
}

下面是重點!!!

其中,我們使用了3個參數$user_name$user_id$password,attempt會把除了$password之外的內容作為$where的內容,從數據庫中搜索記錄,如果記錄為0,那么當然不用說了,驗證失敗,但是存在該記錄時,就需要去匹配$password是否正確。

laravel保存$password的方式是使用PHP的函數password_hash,該函數能計算傳入值的哈希值,而且該函數需要第二個參數,指定哈希處理的方式,Laravel中該參數名為PASSWORD_BCRYPT,Laravel會將密碼經過該函數處理后再保存。(至于如何做到的,暫時沒有機會深究。)

假設你的密碼為123456,那么你保存在數據庫中的值就是

password_hash('123456','PASSWORD_BCRYPT')

Auth::attempt()會將你提交過來的值,做password_hash($post_password,'PASSWORD_BCRYPT')處理,然后跟數據庫中的存儲值進行比較,相等則驗證通過,不相等,則自然驗證失敗。

驗證通過后,使用Auth::login(Auth::user());就可以完成用戶的登錄驗證了。

這里再穿插一個知識點,當你使用Eloquent作為數據庫驅動時,你需要新建一個用戶類,User.php,你可以使用命令行來新建該模型,也可以直接手動新建,但是注意,命令行新建的該模型是存在問題的,Auth::attempt()中會去嘗試調用該模型,但是其中調用的類類型不是Model!!!所以你自以為新建好了User.php后,發現會報以下錯誤:

Argument 1 passed to
Illuminate\Auth\EloquentUserProvider::validateCredentials()
must be an instance of
Illuminate\Contracts\Auth\Authenticatable,
instance of
App\User
given, called in /var/www/sample/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 379 and defined

簡單來說就是你傳遞的參數錯誤了,以下是錯誤演示:

namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}

你只要把User.php模型修改成下面的形式就對了:

?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model implements AuthenticatableContract
{
  use Authenticatable, CanResetPassword;
  // 這個參數是關于軟刪除的,如果你有軟刪除需要,那么你可以加上
  // use SoftDeletes;
}

更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優秀開發框架總結》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • laravel5.2表單驗證,并顯示錯誤信息的實例
  • laravel 驗證錯誤信息到 blade模板的方法
  • Laravel框架表單驗證格式化輸出的方法
  • Laravel框架驗證碼類用法實例分析
  • Laravel多域名下字段驗證的方法
  • laravel http 自定義公共驗證和響應的方法

標簽:金華 萊蕪 溫州 紹興 綏化 呼倫貝爾 清遠 安康

巨人網絡通訊聲明:本文標題《Laravel框架自定義驗證過程實例分析》,本文關鍵詞  Laravel,框架,自定義,驗證,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel框架自定義驗證過程實例分析》相關的同類信息!
  • 本頁收集關于Laravel框架自定義驗證過程實例分析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 涟水县| 彝良县| 龙游县| 小金县| 阿拉善左旗| 南开区| 横山县| 金平| 朝阳市| 酉阳| 长宁区| 彩票| 腾冲县| 浦北县| 扎鲁特旗| 纳雍县| 苗栗县| 马边| 斗六市| 普格县| 凤冈县| 宜春市| 北票市| 泾源县| 兴国县| 濮阳市| 北辰区| 桂平市| 边坝县| 渭南市| 乐安县| 自治县| 绥中县| 图木舒克市| 温宿县| 潼南县| 新和县| 镇雄县| 利辛县| 阿拉善右旗| 贵州省|