2015-10-07 4 views
1

Я пытаюсь получить логин с mfa для работы. Я использую пакет https://github.com/antonioribeiro/google2fa.Laravel 5.1 логин с mfa token

В основном пользователь-миграция выглядит следующим образом

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? Я прочитал об этом, чтобы проверить его с помощью промежуточного программного обеспечения и переменной сеанса, но это кажется неправильным.

ответ

0

Только что разобрался перед публикацией.

Вы можете реализовать «аутентифицированный» -метод в 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', 
     ]); 
} 
Смежные вопросы