질문을 삭제하지 말아주세요.!
 
1
0
-1

ckeditor로 파일 업로드시에 아래와 같은 경로로 token을 같이 보내 주고있습니다.

CKEDITOR.replace('editor1', {
    filebrowserImageUploadUrl: '{{ route('fileupload', array('type'=>'Images', '_token' => csrf_token())) }}',
});
Route::group([
   'namespace' => 'Common',
],function (){
    Route::post('/fileUpload', [
        'as' => 'fileupload',
        'uses' => 'FileUpload@imagesUpload'
    ]);
});


위 소스실행시 TokenMismatchException  에러가 나는데요.

VerifyCsrfToken 클래스에 $except 에 fileupload를 추가해주면 TokenMismatchException  에러는 안나지만

위 소스에서는 왜 에러가 나는지 잘모르겠습니다.


    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      파일 업로드 요청할 때 http header 에 laravel_session 이란 키를 가진 쿠키 값을 제출하지 않아서 일 겁니다. 

      1. 박순재

        쿠키에 laravel_session 은 확인됩니다.

        다른문제인거 같습니다.

      2. 김주원

        CKEditor를 잘 몰라서 완전 엉뚱한 답변일 수 있으니 양해바랍니다.

        제 추측에는 자바스크립트에서 HTTP 클라이언트를 만들고 라라벨 서버에 POST 방식의 요청을 할 것 같은데, 자바스크립트가 보내는 HTTP 요청에 Cookie가 잘 달려 있다는 말씀인가요? 서버에서 VerifyCsrfToken 미들웨어에서 토큰 비교를 하기 전에 클라이언트가 제출한 쿠키를 로그로 찍어 보셨나요? 토큰을 검사하는 위치는 아래 링크입니다.

        https://github.com/laravel/framework/blob/5.4/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L57-L69

      3. 박순재

        로그로 찍어 본건 아닙니다.(크롬 개발자도구 사용했어요.)

        Request Cookies에 laravel_session이 확인되어서요.

      4. 박순재

        좀 이상한 부분이 있는데요.

        route() 파라미터 붙이니깐 연결이 &로 연결되는데요

        이미지 보면 2번째 파라미터가 _token 이였는데 amp;_token으로 들어가있네요??

        (type파라미터를 없애고 token만 파라미터로 연결하면 token에러가 안납니다.)

        amp;를 없앨수는 없나요?

        CKEDITOR.replace('editor1', {
            filebrowserImageUploadUrl: '{{ route('fileupload', array('type'=>'Images', '_token' => csrf_token())) }}',
        });
        
        
        //소스보기 
         filebrowserImageUploadUrl: 'site_url?type=Images&_token=xlCHEI53BlfTNHGvWKJQMQIi8knoim1SPrbBFH5N',
        
        


      5. 박순재
        CKEDITOR.replace('editor1', {
            filebrowserImageUploadUrl: '{!! route('fileupload', array('type'=>'Images', '_token' => csrf_token())) !!}',
        });

        자문 자답이지만 위와 같이 처리 하니 되네요.

        감사합니다.


      CommentAdd your comment...