web-dev-qa-db-ja.com

laravel 5.5ページが非アクティブのために期限切れになりました。更新してもう一度やり直してください

私はLaravelを使い始めたばかりで、理解できない問題があります。私のプロジェクトにはログフォームがあり、私の方法は _ post _ です。リクエストしようとすると、結果は次のようになります。

'ページが非アクティブなため期限切れです。更新してもう一度やり直してください。

しかし、メソッドを _ get _ に変更すれば、うまくいきます。

それがなぜなのか、そしてそれをどう修正するのか、誰かに教えてもらえますか?もちろんPOSTメソッドが必要です。

57
Svetlozar

この問題は失敗するCSRFトークン検証から来ます。ですから、投稿していないか、間違った投稿をしているのでしょうか。

それがGETのために働く理由はLaravelのGETルートのために、掲示されたCSRFトークンがないということです。

次のように呼び出して、CSRFトークンをフォームに投稿することができます。

{{ csrf_field() }}

またはapp/Http/Middleware/VerifyCsrfToken.phpであなたのルート(セキュリティ上の理由により推奨されません)を除外します。

protected $except = [
    'your/route'
];
151
Erik Baars

私の場合は、同じエラーメッセージが表示され、フォームフィールドにcsrf_tokenを追加しなかったことがわかりました。それからcsrf_tokenを追加してください。

フォームヘルパーを使うと、

{{ csrf_field() }}

あるいはフォームヘルパーなしでは、

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

それでもうまくいかない場合は、

ブラウザのキャッシュを更新する

そして今、それはうまくいくかもしれません、ありがとう。

Laravel 5.6用に更新

Laravelは{{ csrf_field() }}の代わりに新しい@csrfを統合します。それは今もっと素敵に見えます。

<form action="">
   @csrf
   ...
</form>
31

アプリケーションにHTMLフォームを定義するときはいつでも、CSRF保護ミドルウェアが要求を検証できるように、フォームに隠しCSRFトークンフィールドを含める必要があります。 tokenフィールドを生成するためにcsrf_fieldヘルパーを使うことができます:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

うまくいかない場合は、ブラウザのキャッシュを更新するとうまくいきます。

オープンリンク: - Laravel 5.5におけるCSRF保護 -

更新:

Bladesテンプレートを使用してLaravel 5.6を使用すると、非常に簡単です。

<form method="POST" action="/profile">
    @csrf
    ...
</form>

詳細については、次のリンクをクリックしてください。 - Laravel 5.6のCSRF保護

7
Udhav Sarvaiya

Config/session.phpファイルにこの行が含まれていることを確認してください。

'domain' => env('SESSION_DOMAIN', null),

次に、.envファイルのSESSION_DOMAIN行を削除します。

3
Youssouf Cherif

これは、Laravelのインストールに含まれるデフォルトのCSRVミドルウェアを使用しているために起こります。解決するために、Kernel.phpからこの行を削除してください:

\App\Http\Middleware\VerifyCsrfToken::class,

あなたがAPIを構築しているなら、これは問題ありません。ただし、Webサイトを構築している場合、これはセキュリティ検証であるため、そのリスクに注意してください。

成功せずに数週間問題を解決するためにさまざまな解決策を試みました。

私が直面していた問題は、laravel 5.0から5.5にアップグレードしてconfig/session.phpを更新するのを忘れたことが原因でした。

誰かが問題に直面している場合は、実行しているLaravelのバージョンと一致するようにconfig/session.phpを更新してください。

2
Rayton Kiwelu

{{csrf_field()}}formタグに配置します

enter image description here

2
Wael Assaf

私は同じ問題を抱えていた。クロームで「閲覧履歴データをクリア」を使用します。多分あなたの問題を解決しなさい。

設定がSESSION_DRIVER = fileに設定されている場合は、セッションディレクトリが書き込み可能かどうかを確認する必要があります。ストレージ/フレームワーク/セッションを確認してください

1

私は同じエラーに直面していたので、私はちょうど私の.envファイルからこの行を削除しました

SESSION_DRIVER = yourwebsite.com

1
Akash Sethi

このコードをフォーム内に配置するだけです

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />
1
Manu Joseph

私の場合は、ob_start()を追加しました。私の index.php 上のサーバー上で、すべてがうまくいっているようです。

1
Ayan Mohammad

それでもだれでもこの問題を抱えています、あなたのフォームの中で以下のように次のコードを使ってください。

 echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';
1

まず、あなたのフォームにcsrfを含めます。

{{ csrf_field() }}

問題が解決しない場合は、index.phpの最初の部分でob_start();を使用してください。

<?php ob_start();
1
Abid Shah

CSRF保護からURIを除外する:

CSRF保護から一連のURIを除外したい場合があります。たとえば、Stripeを使用して支払いを処理し、そのWebhookシステムを利用している場合、Stripeは自分のルートに送信するCSRFトークンを認識しないため、Stripe WebhookハンドラルートをCSRF保護から除外する必要があります。

通常、RouteServiceProviderがroutes/web.phpファイル内のすべてのルートに適用されるWebミドルウェアグループの外側にこれらの種類のルートを配置する必要があります。ただし、VerifyCsrfTokenミドルウェアの$ exceptプロパティにURIを追加して、ルートを除外することもできます。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}
0
Kamlesh

それはおかしいですがそれは私のために働きます。私はこれがlaravelコードのデフォルトのHTML TAGのために引き起こされることに気づきました。代わりに/ * * /または{{ - - }}を使用してください。

または、最近削除されたHTMLコードを削除しようとしています...またはHTMLコメントをPhpコメントに変更してください...またはphp artisan clean browserなどのWorng artisanコマンドを実行してみてください。 ..

0
samtax01

javascriptで form action を変更する必要がある場合は、同じ問題が発生します。

1. first laravelでは{!!Form::open() !!} {!! close() !!}の代わりに使う必要があります
2. second あなたは一番https://www.example.com +your Routeで行動を始めます

あなたのURLにwwwを忘れないでください!

0
Mohammad Khan
  1. それはあなたの形では持っていないcsrfトークンかもしれません。 @crsf{{ csrf_field() }}を使わなければなりません

  2. フォームにcsrfを使用している場合キャッシュかもしれません。アプリのキャッシュを消去します。

    php職人のキャッシュ:クリア

    php職人の意見:クリア

    php職人のキャッシュ:クリア

    そしてブラウザのキャッシュをクリアしてください。

    1. それでもエラーが表示される場合は、新しいキーを作成してください。

php職人の鍵:生成する

0
Turan Zamanlı

フォームに CSRFトークン が既に含まれている場合その後、おそらくあなたのフォームのキャッシュデータが原因でエラーページが表示されます。

あなたのterminal/commandプロンプトを開き、あなたのプロジェクトルートでこれらのコマンドを実行してください。

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan route:clear
  4. php artisan view:clear

また、これらのコマンドを実行しながら、 ブラウザのキャッシュを消去する を試みてください。

0

私は同じ問題を抱えていた、私は多くの解決策を試してみました。しかし、どれも私のために働きませんでした。それから私は何らかの理由で私が私の.envファイルでこれを使用していたことがわかった:

SESSION_DOMAIN = myapp.me

私がそれをnullに戻すとすぐに、すべてがうまくいった。

0
Ahmed Marzouk

formタグに@csrfを追加するだけで私の問題は解決しました

Laravel 5.6{{ csrf_field() }}をサポートしていません{{ csrf_field() }}の代わりに@csrfを追加するだけです

larvel_fix_error.png

0
mysticmeelone

私の場合、隠し入力フィールドの最後に>を追加するのを忘れたので、同じ問題が起こりました。<input type="hidden" name="_token" value="{{ Session::token() }}"

だから、私はそれを追加することでそれを修正しました:

<input type="hidden" name="_token" value="{{ Session::token() }}">
0
Kaloyan Drenski

動作させました / Auth :: routes()を使用する代わりにRouter.phpからルートをコピーすることによって、これらはあなたが必要とするルートです:

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
0
Notflip

私はこの質問が十分に答えられたということを知っています、しかし私は私の場合に働いた修正を述べることを望みました。 {{ csrf_field() }}を追加しましたが、まだ動作しませんでした。

それから私は、開発目的のためにすべてのクッキーをブロックしたことを思い出しました。

設定を変更してMS Edge browser内のすべてのクッキーのブロックを停止すると、問題は解決しました。

0
ghostcoder23x

Formタグの中に@csrfを追加するだけです。

あるいはヘッダにcsrf_tokenを含めてリクエストごとに送信することもできます。

0
Shaz