2016-06-22 12 views
0

Laravel 5.1サイトをLaravel 5.2.39に更新しています。私は "承認された"アップグレードプロセス(特にミドルウェア)で多くの問題を抱えていたので、新しいLaravel 5.2サイトを作成し、旧サイトのビュー、モデル、コントローラを移動しました。Laravel 5.2 token mismatch

<div class="form-group"> 
    {!! Form::label('name', 'Name') !!} 
    {!! Form::text('name', old('name'), ['placeholder' => 'Name', 'class' => 'form-control']) !!} 
</div> 
<div class="form-group"> 
    {!! Form::label('email', 'Email') !!} 
    {!! Form::email('email', old('email'), ['placeholder' => 'Email', 'class' => 'form-control']) !!} 
</div> 
<div class="form-group"> 
    {!! Form::label('phone', 'Phone') !!} 
    {!! Form::text('phone', old('phone'), ['placeholder' => 'Phone', 'class' => 'form-control']) !!} 
</div> 
{{ csrf_field() }} 
<div class="form-group"> 
    {!! Form::submit('Submit', ['class' => 'btn btn-default btn-small']) !!} 
    <input type="reset" class="btn btn-primary btn-small" /> 
</div> 

と私は私をクリアしています

TokenMismatchException in VerifyCsrfToken.php line 67: 

私のフォームはそれらに({{ csrf_field() }}を使用して)トークンを持っている:それは私がトークン不一致例外を取得任意のフォームを送信する場合を除き、動作しているようですまた、タイムアウトしないように、config/session.phplifetimeを高い数値に設定しようとしました。

これはホームステイボックスで実行されています。

どのようなアイデアを試してみませんか?

編集:ここで問題

Route::resource('contact', 'ContactController'); 

EDIT2でのルートがあります:ここでルートファイルです。私はLaravel 5.2のWebミドルウェアでルートをラップする必要があるとは思わないが、同じエラーで両方の方法で試した。コントローラの作成アクションで$request->session()->token()のダンプ

Route::group(['middleware' => ['web']], function() { 

    Route::get('/', '[email protected]'); 

    Route::resource('account', 'AccountController'); 
    Route::resource('contact', 'ContactController'); 

}); 

は、フォームにページ上の現在のセッショントークンを示しています。これは、フォームに追加されたのと同じトークンです(ビューソースでチェックされています)。

しかし、それがIlluminate\Foundation\Http\Middleware\VerifyCsrfToken::tokensMatch()クラスになると、私はセッショントークンをダンプし、フォームトークンとは異なります。つまり、これらは決して一致しません。ここで何を期待するか分からない。

+0

あなたはそのフォーラムの '' '' '' 'のルートを表示してもよろしいですか? – xdevnull

+0

@ xdevnull--それは 'resource'ルート上にありますが、私は自分の答えを編集します。ありがとう – user101289

+0

@ user101278彼らはWeb Group Middlewareの下にいますか? – xdevnull

答えて

0

Form:open宣言がある限り、別途のcsrf_field行は必要ありません。 Form::openはそれを処理する必要があります。

laravel collective formパッケージを使用していますか?古い照明パッケージはもはや維持されません。

以前のユーザーからは、すべてのルートもWebミドルウェアグループにラップする必要がありますが、これも問題になる可能性があります。

+0

はい、これはlaravelの集団パッケージです。 – user101289

+0

上記のフォームの例では、フォームのopenおよびclose宣言は表示されません。あなたのサンプルコードから抜けていたのでしょうか? –

+0

はい、それは部分的なものです。フォームは正常に動作しています。ミドルウェアでトークンチェックを無効にすると、トークンペイロードがコントローラの 'store'アクションに到達していることを確認できます – user101289

0

Webミドルウェア内にルートを配置します。またはApp\http\kernelウェブから保護された$middlewareアレイまでのすべてのルートをコピーします。

+0

上記の元の質問にedit2を参照してください。 – user101289

0

これは本当に迷惑ですが、それ以外の場合は、1つのホームステッドボックスに複数のLaravelサイトが原因で発生した奇妙なエラーです。セッションキーを別に設定してキャッシュをクリアしましたが、まだ動作していませんでした。

ホームステッドボックスを破棄して再構築すると、この問題が修正されたようです。解決策を見つけるためのすべてのコメントと試していただきありがとうございます。