2017-09-09 22 views
1

私のカスタムリクエストクラスが自分のメソッドの1つで呼び出せない理由を理解しようとしています。カスタムリクエストクラスは存在しませんが、それはありますか?

私のクラスはphp artisan make:request ValidateUserSecretRequestで作成しました。

これは、期待通りにHttp/Requestsフォルダに自分のカスタム要求ファイルを作成しました。

ただし、Auth\LoginController.phpの中で呼び出されるValidateUserSecretRequestは、Class App\Http\Controllers\Auth\ValidateUserSecretRequest does not existとなります。不要な方法を除去した。ここ

は、コントローラです:

namespace App\Http\Controllers\Auth; 

use Cache; 
use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Contracts\Auth\Authenticatable; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

use App\Http\Requests\ValidateSecretUserRequest; 
use App\Http\Controllers\Controller; 

class LoginController extends Controller 
{ 

    use AuthenticatesUsers; 

    public function __construct() 
    { 
     $this->middleware('guest')->except('logout'); 
    } 

public function postValidateToken(ValidateUserSecretRequest $request) 
{ 
    // get user id and create cache key 
    $userId = $request->session()->pull('2fa:user:id'); 
    $key = $userId . ':' . $request->totp; 

    // use cache to store token to blacklist 
    Cache::add($key, true, 4); 

    // login and redirect user 
    Auth::loginUsingId($userId); 

    return redirect()->intended($this->redirectTo); 
} 

そして、私のカスタムのリクエストクラス:

namespace App\Http\Requests; 

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

class ValidateUserSecretRequest extends FormRequest 
{ 

    /** 
    * 
    * @var \App\User 
    */ 
    private $user; 

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

} 

私が試した:

  • 作曲ダンプ、自動ロード
  • 作曲家アップデート
  • 傷私の頭を複数回、別の名前で職人でカスタム要求を再作成
  • 、同じ問題が

は地獄はここで何が起こっていますか?

+0

あなたは誤字があると思います。あなたのコントローラでは 'App \ Http \ Requests \ ValidateSecretUserRequest;'を使って書いていますが、他の場所では 'ValidateUserSecretRequest;'を使っています。 –

答えて

0

"Use App \ Http \ Requests \ ValidateSecretUserRequest;"と書いてあります。あなたは "ValidateUserSecretRequest"クラスを使っている間、タイプミスがあります。

0

使用中のエラーApp \ Http \ Requests \ ValidateSecretUserRequest;再度確認することができます。

0

実際には存在しないため、Class App\Http\Controllers\Auth\ValidateUserSecretRequest does not existが得られます。 App\Http\Controllers\Auth\という接頭辞は、現在の名前空間を使用していることを意味します。

UserSecretを交換して、正しいクラス名を書き込む必要があります。

0

あなたはクラス名が間違っています あなたはそれが App\Http\Requests\ValidateSecretUserRequestです。 実際にはValidateUserSecretRequest

関連する問題