2017-11-16 13 views
1

Google 2faに対してValidateSecretRequestという独自のリクエストを作成しました。しかし、私は空の属性だけを取得します。拡張リクエストクラスの属性が空です - Laravel

などの追加情報:私はLoginControllerはpostValidateToken()メソッドを実行する認証()メソッド後https://www.sitepoint.com/2fa-in-laravel-with-google-authenticator-get-secure/

からチュートリアルを行いました。テストのために私は要求出力のみを実装しました。

LoginController

public function postValidateToken(ValidateSecretRequest $request) { 
     echo '<pre>'; print_r($request); echo '</pre>'; 
} 

Requestクラス

まず私はextened要求でのミスがあったと推測?実際にはこの方法で正しいはずですか?

<?php 

namespace App\Http\Requests; 

use Cache; 
use Crypt; 
use Google2FA; 
use App\User; 
use Illuminate\Validation\Factory as ValidatonFactory; 
use Illuminate\Http\Request; 

class ValidateSecretRequest extends Request { 
    /** 
    * 
    * @var \App\User 
    */ 
    private $user; 
    public $totp; 

    /** 
    * Create a new FormRequest instance. 
    * 
    * @param \Illuminate\Validation\Factory $factory 
    * @return void 
    */ 
    public function __construct(ValidatonFactory $factory) { 
     $factory->extend(
     'valid_token', 
     function ($attribute, $value, $parameters, $validator) { 
      $secret = Crypt::decrypt($this->user->google2fa_secret); 

      return Google2FA::verifyKey($secret, $value); 
     }, 
     'Not a valid token' 
    ); 

     $factory->extend(
     'used_token', 
     function ($attribute, $value, $parameters, $validator) { 
      $key = $this->user->id . ':' . $value; 

      return !Cache::has($key); 
     }, 
     'Cannot reuse token' 
    ); 
    } 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() { 
     try { 
     $this->user = User::findOrFail(
      session('2fa:user:id') 
     ); 
     } catch (Exception $exc) { 
     return false; 
     } 

     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() { 
     return [ 
     'totp' => 'bail|required|digits:6|valid_token|used_token', 
     ]; 
    } 
} 

しかし、関数postValidateToken()は空の配列を返します。

App\Http\Requests\ValidateSecretRequest Object 
(
    [user:App\Http\Requests\ValidateSecretRequest:private] => 
    [totp] => 
    [json:protected] => 
    [convertedFiles:protected] => 
    [userResolver:protected] => 
    [routeResolver:protected] => 
    [attributes] => 
    [request] => 
    [query] => 
    [server] => 
    ... 
    [session:protected] => 
    [locale:protected] => 
    [defaultLocale:protected] => en 
    [isHostValid:Symfony\Component\HttpFoundation\Request:private] => 1 
    [isForwardedValid:Symfony\Component\HttpFoundation\Request:private] => 1 
) 

答えて

0

は解決策を見つけた:

あなたは

use Illuminate\Foundation\Http\FormRequest; 
を要求しないFormRequestを使用する必要があります
関連する問題