1. ホーム
  2. php

[解決済み] Laravel 5.1 の VerifyCsrfToken.php の 53 行目で TokenMismatchException が発生する。

2022-02-09 21:09:36

質問

ログインしようとすると、トークンのエラーが表示されます。ビューフォームでトークンを確認したところ正常であり、コメント \App\Http\Middleware\VerifyCsrfToken::class , の中に Kernel.php を実行すると、ログインできるようになりますが、ダッシュボードにリダイレクトされた後、ログインできません。MacでMAMPを使っています。

<div>
    <h1>Login</h1>
    <div>
        {!! Form::open(['url'=>'user/login','class' => '']) !!}
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <ul>
          <li><label>Customer Code</label>{!!Form::Text('customer_code',Input::old('customer_code'),['class'=>''])!!}</li>
          <li><label>Password</label>{!!Form::Password('password','',['class'=>''])!!}</li>
          <li>{!! Form::submit('Submit',array('class' => 'btn')) !!}</li>
        </ul> 
        {!!Form::close()!!}
    </div>
    <div><a href="{!!URL::to('user/forget_password')!!}">Forget Password</a></div>
</div>

一方、私は Sentry Package をログインに使用します。

    /**
     * post_login
     */
    public function post_login()
    { 
        try
        {
            $rules  = [ 
                    'customer_code'         => 'required',
                    'password'              => 'required',
                ] ;                    
            $message = [ 
                    'customer_code.required'             => 'erorrr1',
                    'password.required'                =>'error2'    
                             ];                            
            $validator = Validator::make(Input::all(), $rules,$message);
            if ($validator->fails())
            {            
                return Redirect::back()->withErrors($validator)->withInput();        
            } // if ($validator->fails())
            else
            {
            $authUser = Sentry::authenticateAndRemember(array(
                                      'customer_code'    => Input::get('customer_code'),
                                      'password' => Input::get('password')), false);

                           if($authUser) 
                           {
                                //$login = Sentry::loginAndRemember($authUser);
                                 return Redirect::to('user/panel/'.$authUser->id)->with('comment', 'Welcome');
                           }
                           else
                           {
                             return Redirect::back()->with('comment', 'Error for login');
                           }
            }//validator                           
        }
         catch(\Exception $e)
         {
             return Redirect::back()->withInput(Input::except('password','file'))->withErrors(['ERROR!!!!!']);
         }
}

解決方法は?

編集しました。

フォームビルダーを使用しているので、これをフォームから削除してください。Laravelのフォームビルダーでは、以下のようにすると、自動的に隠しトークンフィールドが追加されます。 Form::open()

なので、この行を削除してください。

 <input type="hidden" name="_token" value="{{ csrf_token() }}">