[英]Laravel 5.1 login with mfa token
我正在嘗試使用MFA進行登錄。 我正在使用https://github.com/antonioribeiro/google2fa軟件包。
基本上,用戶遷移看起來像這樣
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up() {
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->string('google2fa_secret');
$table->boolean('useMfa')->default(false);;
$table->timestamps();
});
}
...
如果用戶尚未激活mfa,則每次用戶打開個人資料頁面時,我都會創建一個新密碼。
if(!$user->useMfaToken()){
$google2fa = new Google2FA();
$user->google2fa_secret = $google2fa->generateSecretKey();
$user->save();
$google2fa_url = $google2fa->getQRCodeGoogleUrl(
'DatenPro.de',
$user->email,
$user->google2fa_secret
);
}
如果用戶輸入用於完成mfa激活的密碼,將執行以下命令:
public function saveMfa(){
$user = \Auth::user();
$secret = \Input::get('secret');
$google2fa = new Google2FA();
$valid = $google2fa->verifyKey($user->google2fa_secret, $secret);
if($valid){
$user->useMfa = true;
$user->save();
return redirect()->back()->withMessage('mfa sucessfully activated');
}
...
現在,我正在使用MFA令牌登錄。 我希望用戶可以選擇是否在登錄頁面上輸入令牌,如果他已經將其激活的話,否則,如果取消選擇了mfa-Checkbox,則“秘密”文本輸入將被隱藏。
Email: __________
Password: __________
Use Mfa: [x]
Secret: __________
我必須將MFA令牌的支票放在哪里? 我已經閱讀了有關通過中間件和會話變量進行檢查的信息,但這似乎是錯誤的。
剛發布之前就想通了。
您可以在AuthController中實現“經過身份驗證”的方法。 可能看起來像這樣:
public function authenticated($request, $user){
if($user->useMfaToken()){
$secret = \Input::get('secret');
$google2fa = new Google2FA();
$validMfaToken = $google2fa->verifyKey($user->google2fa_secret, $secret);
}else{
$validMfaToken = true;
}
if($validMfaToken){
return redirect()->intended('dashboard');
}
Auth::logout();
return redirect($this->loginPath)
->withInput($request->only('email', 'remember'))
->withErrors([
'secret' => 'mfa token was not corret',
]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.