laravel自帶了auth類和User模型來幫助咱們很方便的實現用戶登錄、判斷。
php
先配置一下相關參數 laravel
app/config/auth.php:算法
model 指定模型數據庫
table 指定用戶表api
app/models/user.php:數組
protected $table = 'users';服務器
這裏咱們能夠看出,是否是很簡單?甚至咱們都不用配置就能使用了,而後咱們來看看如何使用的。session
之後臺爲例,每次訪問都必須先判斷用戶是不是登錄狀態,在其餘框架中咱們通常習慣在全部控制器的父控制器中判斷,也就是在laravel中的app/controllers/BaseController.php類__construct方法中:app
<?phpclass BaseController extends Controller {public function __construct(){if(Auth::check() == false){return Redirect::guest('login');}} 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 Login(){if (Auth::attempt(array('email' => $email, 'password' => $password))){return Redirect::intended('/');}}
attempt 方法會接收一個數組來做爲第一個參數,該參數提供的值將用於尋找數據庫中的用戶數據,因此上面所述,用戶信息將使用 email郵箱字段的值在數據庫中進行查找,若是用戶被找到,再將password 的值進行加密並與數據庫中已加密過的密碼進行匹配,若是匹配後兩個值是徹底一致,那麼咱們會建立一個經過認證的會話給用戶。
會話信息獲取到以後,則用戶登陸成功。當用戶身份認證成功 attempt 方法會返回 true,反之則返回 false。
Auth::attempt()方法能夠用來驗證用戶提交的登錄信息是否和users表裏的匹配,在例子中,password這個字段是固定的,你在users表中也應當有對應的字段,而且寬度至少60,切記不是MD5。
而email字段就隨便了,可能你是使用usersname做爲惟一標識符的,這個的話就要看你的項目狀況了,咱們這裏就以 email 做爲登錄帳戶名了,數據庫中也有相應的字段。
可能部份內容會比較難以理解,其實只要換個角度思考就能夠了,Auth只是幫咱們實現了原本須要本身寫的驗證邏輯,好比咱們一開始配置的參數中有model和table,Auth就是根據這個自動幫咱們查詢,若是匹配成功會自動幫咱們寫入session會話,這樣下次Auth::check()的時候就經過了。
固然這裏若是說規模比較大,有作服務器的分佈式部署的話,那麼也會涉及到session入庫和iphash算法的。
Redirect::intended(‘/’)這個方法的意思是跳轉到以前的頁面,若是像上面那樣使用了Redirect::guest()方法,那麼intended這裏就會跳轉到那時候的url,而它的參數只是一個默認值,再沒有記錄歷史url的時候會跳轉到’/’。
還能夠繼續優化,好比咱們不該當在BaseController中進行Auth::check,咱們能夠利用Route::filter,在請求以前就進行驗證,同時Auth也能夠去作一些權限管理,它裏面提供了一些用戶組。
Auth還有一些其餘的方法,好比 Auth::basic() 能夠實現http basic認證。