Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mfa令牌登录Laravel 5.1_Php_Laravel_Login_Authorization_Laravel 5.1 - Fatal编程技术网

Php 使用mfa令牌登录Laravel 5.1

Php 使用mfa令牌登录Laravel 5.1,php,laravel,login,authorization,laravel-5.1,Php,Laravel,Login,Authorization,Laravel 5.1,我正在尝试使用mfa进行登录。我在用这个包裹 基本上,用户迁移是这样的 class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id');

我正在尝试使用mfa进行登录。我在用这个包裹

基本上,用户迁移是这样的

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复选框,则隐藏“机密”文本输入

Email:    __________
Password: __________
Use Mfa:  [x]
Secret:    __________

我必须把mfa代币的支票放在哪里?我读过关于它的文章,通过一个中间件和一个会话变量来检查它,但这似乎有点错误。

在发布之前刚刚弄清楚

您可以在AuthController中实现“authenticated”方法。 这可能是这样的:

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',
        ]);
}

在发帖前就想好了

您可以在AuthController中实现“authenticated”方法。 这可能是这样的:

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',
        ]);
}