2017-04-25 4 views
0

POST 경로에서 Laravel 5.4에 문제가 발생했습니다.Laravel 5.4 TokenMismatchException (Chrome)

양식을 제출하면 TokenMismatchException 오류가 표시됩니다.

나는 PrefixVariable에 관한 것이므로 Github에서 this issue을 열었습니다. 그러나 너무 많은 테스트를 거쳐 다른 솔루션을 시도한 후에 문제가 Prefix에 의해 만들어지지 않았다는 것을 알아 냈습니다.

Firefox의 모든 것이 정상입니다. Chrome에서 주된 문제가 발생합니다. 게시 경로는 첫 번째 양식을 제출 한 후 한 번만 작동합니다. 동일한 URL 얼굴에 대한 모든 다음 요청은 입니다. TokenMismatchException 오류.

내가 시도한 다음 : php artisan cache:clear 명령

  • 실행

    • 지우기 크롬 쿠키와 역사
    • 함께 HTML의 헤더와 PHP에서 포트를
    • 방지 캐싱을
    • 방지 캐싱을 봉사 변경 메타 태그

    하지만 문제는 여전히 존재합니다.

    정확히 무엇이 잘못 되었나요?! 당신이 나를 도와 주시면 감사하겠습니다.

    로그인 양식 :

    <form method="post" action="{{route('login')}}"> 
        {!! csrf_field() !!} 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="form-group no-margin"> 
           <div class="col-xs-6 col-md-10 col-md-offset-1"> 
            <input name="username" type="text" class="form-control" placeholder="نام کاربری" value="{{old('username')}}"> 
           </div> 
          </div> 
          <div class="form-group no-margin"> 
           <div class="col-xs-6 col-md-10 col-md-offset-1"> 
            <input name="password" type="password" class="form-control" placeholder="کلمه عبور"> 
           </div> 
          </div> 
         </div> 
         <div class="col-xs-12"> 
    
          <div class="form-group no-margin"> 
           <div class="col-xs-5 col-md-offset-1"> 
            <input name="captcha" type="text" class="form-control" placeholder="کپچا"> 
           </div> 
           <div class="col-xs-5 no-pad-right"> 
            <img src="{{captcha_src('flat')}}" class="img-responsive"> 
           </div> 
          </div> 
         </div> 
         <div class="col-xs-12 text-center"> 
          <div class="form-group"> 
           <button type="submit" class="btn btn-success btn-raised">ورود<div class="ripple-container"></div></button> 
           <button type="reset" class="btn btn-danger btn-raised">انصراف<div class="ripple-container"></div></button> 
          </div> 
         </div> 
        </div> 
    </form> 
    

    web.php

    Route::group(['prefix' => config('system.ADMIN_PATH'), 'namespace' => 'Panel'], function(){ 
        Route::get('/', function(){return redirect()->route('login');}); 
        Route::get('/auth', '[email protected]')->name('login'); 
        Route::post('/auth', '[email protected]')->name('check'); 
    }); 
    

    AuthController.php :

    namespace App\Http\Controllers\Panel; 
    
    use Illuminate\Http\Request; 
    use Illuminate\Routing\Controller; 
    
    class AuthController extends Controller 
    { 
        public function Login(Request $request) 
        { 
         header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
         header("Cache-Control: post-check=0, pre-check=0", false); 
         header("Pragma: no-cache"); 
    
         return view('admin.login'); 
        } 
    
        public function Auth(Request $request) 
        { 
         header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
         header("Cache-Control: post-check=0, pre-check=0", false); 
         header("Pragma: no-cache"); 
         dump($request->all()); 
         echo "Received"; 
        } 
    } 
    
  • +0

    이러한 헤더의 목적은 무엇입니까? –

    +0

    @TobyMellor 그냥 캐싱을 방지하십시오. 헤더가없는 출력에는 차이가 없습니다. –

    답변

    0

    나는 해결책을 찾아 냈습니다.

    이전에 설정의 기록에서 쿠키를 지우려고했습니다. 나는 Inspect Element > Application Tab > Storage (Left side) > Cookies > localhost:port에서 XSRF-TOKEN 쿠키를 지웠다. 그리고 그 후에, 모든 것이 잘되었다.

    0

    것은 나에게 한 가지를 말해 당신이 기본 laravel의 app.blade.php 같은 코드가 설치시에 제공하고 아래로 레이아웃 파일을 검사합니다.

    <!-- CSRF Token --> 
    <meta name="csrf-token" content="{{ csrf_token() }}"> 
    
    
    <script> 
        window.Laravel = {!! json_encode([ 
         'csrfToken' => csrf_token(), 
        ]) !!}; 
    </script> 
    
    +0

    나는 Ajax와 일하고 있지 않다. 단순한 양식 제출 일뿐입니다. 코드가 Firefox에서 잘 작동하기 때문에 문제는 Chrome 설정과 관련이 있다고 생각합니다. –

    0

    이 문제는 laravel에는 문제가되지 않습니다. 크롬과 관련이 있습니다.

    쿠키가 (reference) (로컬 호스트는 laravel cant save session id이므로 세션을 생성 할 수 없습니다.) 따라서을 재생성하는 것은 입니다.

    이 문제를 테스트하기 위해서는 모든 저장된 세션을 제거하고 페이지를 새로 고침 할 수 있습니다.세션 저장 폴더에 두 세션 파일이 생성 된 경우이 방법이 해결책입니다.

    soloution :

    사용 127.0.0.1 localhost 대신 IP.

    저에게 효과적입니다. 그것을 테스트해라.