laravel身份驗證-Auth的使用


laravel自帶了auth類和User模型來幫助我們很方便的實現用戶登陸、判斷。
首先,先配置一下相關參數
app/config/auth.php:

model 指定模型
table 指定用戶表
這里我只是將table從users改成user,因為我個人在數據庫命名方面喜歡用單數。

app/models/User.php:

protected $table = 'user';

可以看出,很簡單甚至不用配置就能使用了,接下來看看如何使用。

以后台為例,每次訪問肯定需要先判斷用戶是否是登陸狀態,在其他框架中我們一般習慣在所有控制器的父控制器中判斷,也就是在laravel中的app/controllers/BaseController.php類__construct方法中:

<?php

class BaseController extends Controller {

public function __construct()
{
if(Auth::check() == false){
return Redirect::guest('login');
}
}
/**
* Setup the layout used by the controller.
*
* @return void
*/
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
}

}
代碼很容易理解,我們通過 Auth::check() 就可以判斷用戶是否登陸狀態,如果不是的話,直接重定向到 /login 這個url,為什么用Redirect::guest()而不用Redirect::to()呢,通過api手冊可以查到:Redirect::guest() 在重定向時會將當前url保存到session中,這樣可以在登陸以后,使用Redirect::intended()方法跳轉到之前的頁面繼續業務。
跳轉到/login這個頁面,當然得實現寫好路由,可以指向某個控制器方法,詳細的就不提了,假設login表單提交處理方法大致如下:

public function postLogin()
{
if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
return Redirect::intended('/');
}
}

attempt 方法會接收一個數組來作為第一個參數,該參數提供的值將用於尋找數據庫中的用戶數據。因此在上面的例子中,用戶信息將使用 email 字段的值在數據庫中進行查找,如果用戶被找到,在將 password 的值進行哈希加密並與數據庫中已加密過的密碼進行匹配,如果匹配后兩個值完全一致,則會創建一個通過認證的會話給用戶。會話獲取到之后,即視為用戶登錄成功。當用戶身份認證成功 attempt 方法會返回 true,反之則返回 false。

Auth::attempt()方法可以用來驗證用戶提交的登陸信息是否和user表里的匹配,在例子中,password這個字段是固定的,你在user表中也應當有對應的字段,並且寬度至少60,切記不是MD5。而email字段就隨便了,可能你是使用username作為唯一標識符的,這個因項目而異吧,這里就隨便以 email 作為登陸賬戶名了,數據庫中也有相應的字段。

可能有人會比較難以理解,其實只要換個角度,Auth只是幫我們實現了本來需要自己寫的驗證邏輯,還記得一開始配置的參數中有model和table,Auth就是根據這個自動幫我們查詢,如果匹配成功會自動幫我們寫入session,這樣下次Auth::check()的時候就通過了。

Redirect::intended(‘/’)這個方法的意思是跳轉到之前的頁面,如果像上面那樣使用了Redirect::guest()方法,那么intended這里就會跳轉到那時候的url,而它的參數只是一個默認值,再沒有記錄歷史url的時候會跳轉到’/’。

還可以繼續優化,比如我們不應當在BaseController中進行Auth::check,我們可以利用Route::filter,在請求之前就進行驗證,這方面可以參考手冊中Route的相關章節。

Auth還有一些其他的方法,比如 Auth::basic() 可以實現http basic認證。

有需要交流的小伙伴可以點擊這里加本人QQ:luke


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM