2017-09-09 44 views
1

我想弄清楚爲什麼我的自定義請求類不能被我的方法之一調用。自定義請求類不存在,但它呢?

我創建了我的課程,php artisan make:request ValidateUserSecretRequest

按預期在Http/Requests文件夾中創建了我的自定義請求文件。

但是,ValidateUserSecretRequest在我的Auth\LoginController.php內調用,我得到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

你已經編寫了「使用App \ Http \ Requests \ ValidateSecretUserRequest;」當您使用「ValidateUserSecretRequest」類時,存在拼寫錯誤。

0

使用錯誤App \ Http \ Requests \ ValidateSecretUserRequest;您可以再次檢查。

0

你得到Class App\Http\Controllers\Auth\ValidateUserSecretRequest does not exist,因爲它不是真的存在。錯誤中的前綴App\Http\Controllers\Auth\表示它使用當前命名空間。

看看ValidateUserSecretRequest - 你應該換UserSecret寫出正確的類名。

0

您的類名錯誤 您擁有它作爲 App\Http\Requests\ValidateSecretUserRequest; 但實際上它是ValidateUserSecretRequest