我已經實現了Laravel 5.4的默認註冊/登錄可能性。登錄用戶之前的其他步驟
現在我想添加第二個因素來驗證。用戶輸入他的憑據後,我希望向他發送一封帶有安全代碼的電子郵件,並向用戶提供一份表格,用於從他的電子郵件中插入安全代碼。只有在他插入了正確的安全代碼後,我才希望允許用戶登錄。
我的問題是如何在使用Laravel 5.4的登錄流程中創建此額外步驟?目前由Laravel創建的LoginController是空的,我不知道如何在登錄過程中獲得立足點。
我已經實現了Laravel 5.4的默認註冊/登錄可能性。登錄用戶之前的其他步驟
現在我想添加第二個因素來驗證。用戶輸入他的憑據後,我希望向他發送一封帶有安全代碼的電子郵件,並向用戶提供一份表格,用於從他的電子郵件中插入安全代碼。只有在他插入了正確的安全代碼後,我才希望允許用戶登錄。
我的問題是如何在使用Laravel 5.4的登錄流程中創建此額外步驟?目前由Laravel創建的LoginController是空的,我不知道如何在登錄過程中獲得立足點。
爲了達到你想要的,你想使用Laravel的中間件。欲瞭解更多信息,請看這裏 - https://laravel.com/docs/5.4/middleware#registering-middleware
正如評論中所述,這個問題有多個步驟。
我認爲令牌生成部分應該是微不足道的。所以繼續:
發送電子郵件給用戶,這又可以分成多個步驟。
處理事件。
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data){
$user = User::create([
'name' => $data['firstname'] . " " . $data['lastname'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'email_token' => str_random(10),
'verified' => false
]);
event(new UserRegistered($user));
return $user;
}
爲此,您需要將email_token
和verified
領域與遷移添加到您的User
模型。
這港島線創建一個新用戶,並生成令牌(該令牌生成不保證此之後,它會觸發一個UserRegistered
事件
這個事件看起來像:。
class UserRegistered{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user){
$this->user = $user;
}
}
要聽此情況下,您將需要創建您的聽衆
class UserListener{
/**
* Handle the event.
*
* @param UserRegistered $event
* @return void
*/
public function handle(UserRegistered $
Mail::to($event->user)->send(new EmailVerification($event->user));
//EmailVerficiation is an instance of Mailable;
}
}
而這個監聽器綁定到你的事件,在您的AppServiceProvider
編輯以下內容:
protected $listen = [
'App\Events\UserRegistered' => [
'App\Listeners\UserListener',
],
];
之後,您將需要創建一個用戶可以確認他們的電子郵件的路線。
然後,您可以創建一個新的中間件:
class EmailVerification
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::user()->verified) {
return $next($request);
}
return redirect('/wait_for_approval');
// Or any other route to indicate that they need to validate their email.
}
}
這個中間件然後將需要在你的Kernel.php
註冊,在你$routeMiddleware
添加'auth.approved_email' => \App\Http\Middleware\EmailVerification::class,
然後你就可以直接使用這個中間件或把它與其他中間件組成一個組。
有很多步驟需要回答你的問題。將它分解成更小的問題可能會更好,比如「發送確認郵件給用戶」,「通過確認URL驗證用戶」等。當前你的問題太廣泛了。 – DrRoach
其實這只是我需要做的描述,而且我知道如何去做大部分:)我問的問題是如何在laravels身份驗證過程中獲得立足點,以便我可以執行這些步驟。 – user1985273
使用中間件? –