Laravel Auth驗證

laravel自帶了auth類和User模型來幫助咱們很方便的實現用戶登錄、判斷。php

首先,先配置一下相關參數 app/config/auth.phplaravel

  • model 指定模型數據庫

  • table 指定用戶表api

    protected $table = 'user';session

理由同上。app

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

之後臺爲例,每次訪問確定須要先判斷用戶是不是登錄狀態,在其餘框架中咱們通常習慣在全部控制器的父控制器中判斷,也就是在laravel中的app/controllers/BaseController.php類__construct方法中:post

<?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表單提交處理方法大體以下:this

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

 

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認證,詳細的能夠參考手冊 "身份驗證" 章節,以及相關api,本文只是描述下大體的驗證流程,不會深究了,畢竟阿婆主本身才接觸一點點內容。

相關文章
相關標籤/搜索