laravel 5.5 비활성으로 인해 페이지가 만료되었습니다. 새로 고침하고 다시 시도하세요.
저는 Laravel을 처음 접했고 이해하지 못하는 문제가 있습니다. 내 프로젝트에 로그 양식이 있고 내 방법은 POST 입니다. 요청을 시도하면 결과는 다음과 같습니다.
'비 활동으로 인해 페이지가 만료되었습니다. 새로 고침하고 다시 시도하세요. '
그러나 방법을 GET으로 변경하면 제대로 작동합니다.
누군가가 그 이유와 해결 방법을 말해 줄 수 있습니까? 물론 POST 방법이 필요하기 때문입니다.
이 문제는 실패한 CSRF 토큰 검증에서 비롯됩니다. 그래서 당신은 하나를 게시하지 않거나 잘못된 것을 게시하고 있습니다.
GET에서 작동하는 이유는 Laravel의 GET 경로에 대해 게시 된 CSRF 토큰이 없기 때문입니다.
다음을 호출하여 양식에 CSRF 토큰을 게시 할 수 있습니다.
{{ csrf_field() }}
또는 다음에서 경로를 제외합니다 (보안 상 권장되지 않음) app/Http/Middleware/VerifyCsrfToken.php
.
protected $except = [
'your/route'
];
제 경우에는 동일한 오류 메시지가 표시되고 csrf_token
양식 필드 에 추가하지 못한 것을 알았습니다 . 그런 다음 csrf_token
.
양식 도우미를 사용하여
{{ csrf_field() }}
또는 양식 도우미 없이는
<input type="hidden" name="_token" value="{{ csrf_token() }}">
그래도 작동하지 않으면
브라우저 캐시 새로 고침
이제 작동 할 수 있습니다. 감사합니다.
Laravel 5.6 업데이트
라 라벨 @csrf
은 {{ csrf_field() }}
. 이제 더 좋아 보입니다.
<form action="">
@csrf
...
</form>
애플리케이션에서 HTML 양식을 정의 할 때마다 양식에 숨겨진 CSRF 토큰 필드를 포함하여 CSRF 보호 미들웨어가 요청을 검증 할 수 있도록해야합니다. 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 보호
이것은 Laravel 설치에서 기본 CSRV 미들웨어를 사용하고 있기 때문에 발생합니다. 해결하려면 Kernel.php에서 다음 줄을 제거하십시오.
\App\Http\Middleware\VerifyCsrfToken::class,
API를 빌드하는 경우 괜찮습니다. 그러나 웹 사이트를 구축하는 경우 이것은 보안 확인이므로 위험에 유의하십시오.
config / session.php 파일에이 줄이 있는지 확인하십시오.
'domain' => env('SESSION_DOMAIN', null),
그런 다음 SESSION_DOMAIN
.env 파일에서 줄을 제거 하십시오.
나는 같은 문제가 있었다. 크롬에서 '인터넷 사용 기록 삭제'를 사용하세요. 문제를 해결할 수도 있습니다.
제 경우에는 ob_start (); 서버의 index.php 상단에 모든 것이 잘 작동하는 것 같습니다.
장소 {{csrf_field()}}
당신의 속으로 form
태그
성공하지 못한 채 몇 주 동안 문제를 해결하기 위해 다양한 솔루션을 시도했습니다.
내가 직면 한 문제는 laravel 5.0에서 5.5로 업그레이드하여 config / session.php를 업데이트하는 것을 잊었습니다.
누구든지 문제에 직면하면 실행중인 Laravel의 버전과 일치하도록 config / session.php를 업데이트하십시오.
먼저 양식에 csrf를 포함하십시오.
{{ csrf_field() }}
문제가 해결되지 않으면 ob_start();
index.php의 맨 처음에 사용 하십시오.
<?php ob_start();
이 코드를 양식 안에 넣으십시오.
<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />
동일한 오류가 발생하여 .env 파일에서이 줄을 제거했습니다.
SESSION_DRIVER = yourwebsite.com
구성이 설정되어있는 경우 : SESSION_DRIVER = file 세션 디렉토리가 쓰기 가능한지 확인해야합니다. 스토리지 / 프레임 워크 / 세션 확인
여전히이 문제가있는 사람은 다음과 같이 양식 내에서 다음 코드를 사용하십시오.
echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';
양식에 CSRF 토큰 을 이미 포함시킨 경우 . 그런 다음 양식의 캐시 데이터로 인해 오류 페이지가 표시됩니다.
터미널 / 명령 프롬프트를 열고 프로젝트 루트에서이 명령을 실행합니다.
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
,
또한 이러한 명령을 실행 하면서 브라우저 캐시 를 지우십시오 .
나는 같은 문제가 있었고 많은 해결책을 시도했습니다. 그러나 아무도 나를 위해 일하지 않았습니다. 그런 다음 어떤 이유로 .env 파일에서 이것을 사용하고 있음을 알았습니다.
SESSION_DOMAIN = myapp.me
다시 null로 되 돌리 자마자 모든 것이 잘 작동했습니다.
내 경우에는 >
숨겨진 입력 필드 끝에 추가하는 것을 잊었 기 때문에 동일한 문제가 발생했습니다 .<input type="hidden" name="_token" value="{{ Session::token() }}"
그래서 그것을 추가하여 수정했습니다.
<input type="hidden" name="_token" value="{{ Session::token() }}">
재미 있지만 저에게는 효과가 있습니다. 나는 이것이 laravel 코드의 기본 HTML TAG 때문에 발생한다는 것을 깨달았습니다. 대신 / * * / 또는 {{--}} 사용
또는 코드에서 최근 Html Coment를 제거하십시오 ... 또는 Html Comment를 Php Comment로 변경하십시오 ... 또는 php artisan clean browser와 같은 Worng artisan 명령을 실행하고 오류와 함께 HTML 주석 데이터가 출력되는지 확인하십시오. ..
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');
이 질문에 만족스럽게 대답 한 것을 알고 있지만 제 경우에 효과가있는 수정 사항을 언급하고 싶습니다. 추가 {{ csrf_field() }}
했지만 여전히 작동하지 않았습니다.
Then I remembered that I blocked all cookies for development purposes, which can be nice when you change the page and want to refresh it.
Once I changed the settings to stop blocking all cookies in MS Edge browser
the problem went away.
my problem solved by just adding @csrf
in form tag
Laravel 5.6
doesn't support {{ csrf_field() }}
just add @csrf
in place of {{ csrf_field() }}
larvel_fix_error.png
Just add @csrf
inside your form tag.
Or you can include csrf_token
in the header to send it with every request.
if you need to change form action with Javascript you will have the same problem
1.first you need to use instead of {!!Form::open() !!} {!! close() !!}
in laravel
2.second you most begin your action with https://www.example.com +your Route
Do not Forget www in your url!!!
Excluding URIs From CSRF Protection:
Sometimes you may wish to exclude a set of URIs from CSRF protection. For example, if you are using Stripe to process payments and are utilizing their webhook system, you will need to exclude your Stripe webhook handler route from CSRF protection since Stripe will not know what CSRF token to send to your routes.
Typically, you should place these kinds of routes outside of the web middleware group that the RouteServiceProvider applies to all routes in the routes/web.php file. However, you may also exclude the routes by adding their URIs to the $except property of the VerifyCsrfToken middleware:
<?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/*',
];
}
It may be csrf token do not have in your form. You have to use
@crsf
or{{ csrf_field() }}
If you are use csrf on your form. It may be cache. Clear your app cache.
php artisan cache:clear php artisan view:clear php artisan cache:clear
그리고 브라우저 캐시를 지우십시오.
오류가 다시 표시되면 새 키를 만듭니다.
php artisan key:generate
로 이동하여 App/Kernel.php
댓글을 작성하십시오 \App\Http\Middleware\VerifyCsrfToken::class
.
'programing tip' 카테고리의 다른 글
Java-URL의 리디렉션 된 URL을 찾는 방법은 무엇입니까? (0) | 2020.12.07 |
---|---|
TRUNCATE와 DELETE FROM의 장단점 (0) | 2020.12.07 |
Android-@drawable String에서 리소스 열기 (0) | 2020.12.06 |
Python-목록 단 조성을 확인하는 방법 (0) | 2020.12.06 |
Eclipse에서 여러 스레드 디버깅 (0) | 2020.12.06 |