99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

用戶認(rèn)證

2018-02-24 15:51 更新

Laravel 已經(jīng)預(yù)設(shè)了兩個(gè)認(rèn)證相關(guān)的控制器。 AuthController處理新的用戶注冊(cè)和「登陸」,而 PasswordController 可以幫助已經(jīng)注冊(cè)的用戶重置密碼。

每個(gè)控制器使用 trait 引入需要的方法。在大多數(shù)應(yīng)用上,你不需要修改這些控制器。這些控制器用到的視圖放在 resources/views/auth 目錄下。你可以依照需求修改這些視圖。

用戶注冊(cè)

要修改應(yīng)用注冊(cè)新用戶時(shí)所用到的表單字段,可以修改 App\Services\Registrar 類。這個(gè)類負(fù)責(zé)驗(yàn)證和建立應(yīng)用的新用戶。

Registrar 的 validator 方法包含新用戶時(shí)的驗(yàn)證規(guī)則,而 Registrar 的 create 方法負(fù)責(zé)在數(shù)據(jù)庫(kù)中建立一條新的 User 記錄。你可以自由的修改這些方法。Registrar 方法是通過(guò)AuthenticatesAndRegistersUsers trait 的中的 AuthController 調(diào)用的。

手動(dòng)認(rèn)證

如果你不想使用預(yù)設(shè)的 AuthController,你需要直接使用 Laravel 的身份驗(yàn)證類來(lái)管理用戶認(rèn)證。別擔(dān)心,這也很簡(jiǎn)單的!首先,讓我們看看 attempt 方法:

<?php namespace App\Http\Controllers;

use Auth;
use Illuminate\Routing\Controller;

class AuthController extends Controller {

    /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
    public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password]))
        {
            return redirect()->intended('dashboard');
        }
    }

}

attempt 方法可以接受由鍵值對(duì)組成的數(shù)組作為第一個(gè)參數(shù)。password 的值會(huì)先進(jìn)行 哈希。數(shù)組中的其他 值會(huì)被用來(lái)查詢數(shù)據(jù)表里的用戶。所以,在上面的示例中,會(huì)根據(jù) email 列的值找出用戶。如果找到該用戶,會(huì)比對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的哈希過(guò)的密碼以及數(shù)組中的哈希過(guò)后的 password值。假設(shè)兩個(gè)哈希后的密碼相同,會(huì)重新為用戶啟動(dòng)認(rèn)證通過(guò)的 session。

如果認(rèn)證成功, attempt 將會(huì)返回 true。否則則返回 false

注意:在上面的示例中,并不一定要使用 email 字段,這只是作為示例。你應(yīng)該使用對(duì)應(yīng)到數(shù)據(jù)表中的「username」的任何鍵值。

intended 方法會(huì)重定向到用戶嘗試要訪問的 URL , 其值會(huì)在進(jìn)行認(rèn)證過(guò)濾前被存起來(lái)。也可以給這個(gè)方法傳入一個(gè)預(yù)設(shè)的 URI,防止重定向的網(wǎng)址無(wú)法使用。

以特定條件驗(yàn)證用戶

在認(rèn)證過(guò)程中,你可能會(huì)想要加入額外的認(rèn)證條件:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1]))
{
    // The user is active, not suspended, and exists.
}

判斷用戶是否已驗(yàn)證

判斷一個(gè)用戶是否已經(jīng)登錄,你可以使用 check 方法:

if (Auth::check())
{
    // The user is logged in...
}

認(rèn)證用戶并且「記住」他

假如你想要在應(yīng)用中提供「記住我」的功能,你可以傳入布爾值作為 attempt 方法的第二個(gè)參數(shù),這樣就可以保留用戶的認(rèn)證身份(或直到他手動(dòng)登出為止)。當(dāng)然,你的 users 數(shù)據(jù)表必需包括一個(gè)字符串類型的 remember_token 列來(lái)儲(chǔ)存「記住我」的標(biāo)識(shí)。

if (Auth::attempt(['email' => $email, 'password' => $password], $remember))
{
    // The user is being remembered...
}

假如有使用「記住我」功能,可以使用 viaRemember 方法判定用戶是否擁有「記住我」的 cookie 來(lái)判定用戶認(rèn)證:

if (Auth::viaRemember())
{
    //
}

以 ID 認(rèn)證用戶

要通過(guò) ID 來(lái)認(rèn)證用戶,使用 loginUsingId 方法:

Auth::loginUsingId(1);

驗(yàn)證用戶信息而不登陸

validate 方法可以讓你驗(yàn)證用戶憑證信息而不用真的登陸應(yīng)用:

if (Auth::validate($credentials))
{
    //
}

在單一請(qǐng)求內(nèi)登陸用戶

你也可以使用 once 方法來(lái)讓用戶在單一請(qǐng)求內(nèi)登陸。不會(huì)有任何 sessioncookie 產(chǎn)生:

if (Auth::once($credentials))
{
    //
}

手動(dòng)登陸用戶

假如你需要將一個(gè)已經(jīng)存在的用戶實(shí)例登陸應(yīng)用,你可以調(diào)用 login 方法并且傳入用戶實(shí)例:

Auth::login($user);

這個(gè)方式和使用 attempt 方法驗(yàn)證用戶憑證信息是一樣的。
用戶登出

Auth::logout();

當(dāng)然,假設(shè)你使用 Laravel 內(nèi)建的認(rèn)證控制器,預(yù)設(shè)提供了讓用戶登出的方法。

認(rèn)證事件

當(dāng) attempt 方法被調(diào)用時(shí),auth.attempt 事件 會(huì)被觸發(fā)。假設(shè)用戶嘗試認(rèn)證成功并且登陸了,auth.login 事件會(huì)被觸發(fā)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)