2016-06-22 4 views
0

Laravel 5.1 사이트를 Laravel 5.2.39로 업데이트하고 있습니다. "승인 된"업그레이드 프로세스 (특히 미들웨어)에 많은 문제가 있었기 때문에 새로운 Laravel 5.2 사이트를 만들고 이전 사이트의 내보기, 모델 및 컨트롤러로 이동했습니다.Laravel 5.2 토큰 불일치

TokenMismatchException in VerifyCsrfToken.php line 67: 

내 형태는 그들 ({{ csrf_field() }} 사용) 토큰이 있습니다 : 그것은 내가 토큰 불일치 예외 얻을 어떤 형태로 제출하는 경우를 제외하고, 작동하는 것 같군

<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> 

를 내가 삭제 한 내 쿠키를 삭제하고 시간 초과가 발생하지 않도록 더 높은 숫자로 config/session.phplifetime을 설정해 보았습니다.

이것은 농가 상자에서 실행됩니다.

어떤 아이디어를 시도해 볼까요?

편집 : 여기에 질문

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

EDIT2의 경로입니다 : 여기에 경로 파일입니다. Laravel 5.2에서 웹 미들웨어의 경로를 래핑해야한다고는 생각하지 않지만 동일한 오류로 두 가지 방법을 시도했습니다. 컨트롤러의 생성 작용에 $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

해당 포럼에 대한'''POST'' 경로를 보여 주실 수 있습니까? – xdevnull

+0

@ xdevnull-- 그것은'resource' 경로에 있지만 내 대답을 편집 할 것입니다. 감사합니다 – user101289

+0

@ user101278 그들은 웹 그룹 미들웨어에 있습니까? – xdevnull

답변

0

Form:open 선언이 있으면 더 이상 별도의 csrf_field 행이 필요하지 않습니다. Form::open이 처리해야합니다.

laravel collective form 패키지를 사용하고 있습니까? 오래된 조명 패키지는 더 이상 유지 관리되지 않습니다.

이전 사용자가 말했듯이 모든 경로 또한 웹 미들웨어 그룹에 래핑되어야하며 이는 또한 문제 일 수 있습니다.

+0

예, 이것은 라라웨어 집단 패키지입니다. – user101289

+0

위의 양식 예제는 양식 열기 및 닫기 선언을 표시하지 않습니다. 당신의 예제 코드에서 빠지거나 누락 되었습니까? –

+0

네, 그건 단지 부분적인 것입니다. 양식이 정상적으로 작동하고 있으며 미들웨어에서 토큰 검사를 비활성화하면 토큰 페이로드가 컨트롤러의'store' 액션에 전달되는지 확인할 수 있습니다 – user101289

0

웹 미들웨어 내에 경로를 배치하십시오. 또는 App\http\kernel 웹에서 보호 된 모든 경로를 $middleware 어레이로 복사하십시오.

+0

위의 원래 질문에 edit2를 참조하십시오. – user101289

0

이것은 정말 짜증나지만, 다른 모든 것들이 나타난 후에 이것은 하나의 Homestead 상자에있는 여러 개의 Laravel 사이트로 인한 이상한 오류였습니다. 세션 키를 다르게 설정하고 캐시를 지웠지만 여전히 작동하지 않았습니다.

농가 상자를 파기하고 재건하면이 문제가 해결 된 것으로 보입니다. 솔루션을 찾는 모든 의견과 시도에 감사드립니다.