W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Laravel 已經(jīng)預設了兩個認證相關的控制器。 AuthController
處理新的用戶注冊和「登陸」,而 PasswordController
可以幫助已經(jīng)注冊的用戶重置密碼。
每個控制器使用 trait
引入需要的方法。在大多數(shù)應用上,你不需要修改這些控制器。這些控制器用到的視圖放在 resources/views/auth
目錄下。你可以依照需求修改這些視圖。
要修改應用注冊新用戶時所用到的表單字段,可以修改 App\Services\Registrar 類。這個類負責驗證和建立應用的新用戶。
Registrar 的 validator
方法包含新用戶時的驗證規(guī)則,而 Registrar 的 create
方法負責在數(shù)據(jù)庫中建立一條新的 User 記錄。你可以自由的修改這些方法。Registrar
方法是通過AuthenticatesAndRegistersUsers trait
的中的 AuthController
調(diào)用的。
如果你不想使用預設的 AuthController
,你需要直接使用 Laravel 的身份驗證類來管理用戶認證。別擔心,這也很簡單的!首先,讓我們看看 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 方法可以接受由鍵值對組成的數(shù)組作為第一個參數(shù)。password 的值會先進行 哈希。數(shù)組中的其他 值會被用來查詢數(shù)據(jù)表里的用戶。所以,在上面的示例中,會根據(jù) email 列的值找出用戶。如果找到該用戶,會比對數(shù)據(jù)庫中存儲的哈希過的密碼以及數(shù)組中的哈希過后的 password值。假設兩個哈希后的密碼相同,會重新為用戶啟動認證通過的 session。
如果認證成功, attempt
將會返回 true
。否則則返回 false
。
注意:在上面的示例中,并不一定要使用 email 字段,這只是作為示例。你應該使用對應到數(shù)據(jù)表中的「username」的任何鍵值。
intended
方法會重定向到用戶嘗試要訪問的 URL , 其值會在進行認證過濾前被存起來。也可以給這個方法傳入一個預設的 URI,防止重定向的網(wǎng)址無法使用。
在認證過程中,你可能會想要加入額外的認證條件:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1]))
{
// The user is active, not suspended, and exists.
}
判斷一個用戶是否已經(jīng)登錄,你可以使用 check 方法:
if (Auth::check())
{
// The user is logged in...
}
假如你想要在應用中提供「記住我」的功能,你可以傳入布爾值作為 attempt
方法的第二個參數(shù),這樣就可以保留用戶的認證身份(或直到他手動登出為止)。當然,你的 users
數(shù)據(jù)表必需包括一個字符串類型的 remember_token
列來儲存「記住我」的標識。
if (Auth::attempt(['email' => $email, 'password' => $password], $remember))
{
// The user is being remembered...
}
假如有使用「記住我」功能,可以使用 viaRemember 方法判定用戶是否擁有「記住我」的 cookie 來判定用戶認證:
if (Auth::viaRemember())
{
//
}
要通過 ID 來認證用戶,使用 loginUsingId
方法:
Auth::loginUsingId(1);
validate
方法可以讓你驗證用戶憑證信息而不用真的登陸應用:
if (Auth::validate($credentials))
{
//
}
你也可以使用 once
方法來讓用戶在單一請求內(nèi)登陸。不會有任何 session
或 cookie
產(chǎn)生:
if (Auth::once($credentials))
{
//
}
假如你需要將一個已經(jīng)存在的用戶實例登陸應用,你可以調(diào)用 login
方法并且傳入用戶實例:
Auth::login($user);
這個方式和使用 attempt
方法驗證用戶憑證信息是一樣的。
用戶登出
Auth::logout();
當然,假設你使用 Laravel 內(nèi)建的認證控制器,預設提供了讓用戶登出的方法。
當 attempt
方法被調(diào)用時,auth.attempt
事件 會被觸發(fā)。假設用戶嘗試認證成功并且登陸了,auth.login
事件會被觸發(fā)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: