복붙노트

[JQUERY] Laravel 5.5 아약스 전화 419 (알 수없는 상태)

JQUERY

Laravel 5.5 아약스 전화 419 (알 수없는 상태)

해결법


  1. 1.헤드 섹션에서 사용 :

    헤드 섹션에서 사용 :

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    및 얻을 CSRF 토큰 아약스 :

    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
    });
    

    Laravel 문서 csrf_token을 참조하십시오


  2. 2.이 문제를 해결하는 또 다른 방법은 아약스 데이터의 _token 필드를 사용하여 값을 설정하는 것입니다 {{csrf_token ()}} 블레이드한다. 여기 난 그냥 내 말에 시도하는 작업 코드입니다.

    이 문제를 해결하는 또 다른 방법은 아약스 데이터의 _token 필드를 사용하여 값을 설정하는 것입니다 {{csrf_token ()}} 블레이드한다. 여기 난 그냥 내 말에 시도하는 작업 코드입니다.

    $.ajax({
        type: "POST",
        url: '/your_url',
        data: { somefield: "Some field value", _token: '{{csrf_token()}}' },
        success: function (data) {
           console.log(data);
        },
        error: function (data, textStatus, errorThrown) {
            console.log(data);
    
        },
    });
    

  3. 3.이 Kannan은의 대답과 비슷합니다. 그러나이 수정 토큰이 크로스 도메인 사이트로 전송 안되는 문제. 이 로컬 요청 인 경우에만 헤더를 설정합니다.

    이 Kannan은의 대답과 비슷합니다. 그러나이 수정 토큰이 크로스 도메인 사이트로 전송 안되는 문제. 이 로컬 요청 인 경우에만 헤더를 설정합니다.

    HTML :

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    JS :

    $.ajaxSetup({
        beforeSend: function(xhr, type) {
            if (!type.crossDomain) {
                xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
            }
        },
    });
    

  4. 4.페이지에서 이것을 사용

    페이지에서 이것을 사용

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    당신의 아약스에서 데이터를 사용 :

    _token: '{!! csrf_token() !!}',
    

    그건:

    $.ajax({
              url: '/fetch-company/' + companyId,
              dataType : 'json',
              type: 'POST',
              data: {
                       _token: '{!! csrf_token() !!}',
                     },
              contentType: false,
              processData: false,
              success:function(response) {
                   console.log(response);
              }
         });
    

    감사.


  5. 5.그것은 당신의 세션 도메인이 앱 URL과 일치하지 않는 및 / 또는 호스트 응용 프로그램에 액세스하는 데 사용되는 가능합니다.

    그것은 당신의 세션 도메인이 앱 URL과 일치하지 않는 및 / 또는 호스트 응용 프로그램에 액세스하는 데 사용되는 가능합니다.

    1) 당신은 .env 파일을 확인 :

    SESSION_DOMAIN=example.com
    APP_URL=example.com
    

    2) 확인 설정 / session.php

    그들이 올바른지 확인 값을 확인합니다.


  6. 6.내 경우에는 내가 제출 양식에 csrf_token 입력을 추가하는 것을 잊었다. 그래서 내가 이런 짓을 HTML :

    내 경우에는 내가 제출 양식에 csrf_token 입력을 추가하는 것을 잊었다. 그래서 내가 이런 짓을 HTML :

    <form class="form-material" id="myform">
    ...
    <input type="file" name="l_img" id="l_img">
    <input type="hidden" id="_token" value="{{ csrf_token() }}">
    ..
    </form>
    

    JS :

    //setting containers
            var _token = $('input#_token').val();
            var l_img = $('input#l_img').val();
            var formData = new FormData();
            formData.append("_token", _token);
            formData.append("l_img", $('#l_img')[0].files[0]);
    
            if(!l_img) {
                //do error if no image uploaded
                return false;
            }
            else
            {
                $.ajax({
                    type: "POST",
                    url: "/my_url",
                    contentType: false,
                    processData: false,
                    dataType: "json",
                    data : formData,
                    beforeSend: function()
                    {
                        //do before send
                    },
                    success: function(data)
                    {
                        //do success
                    },
                    error: function(jqXhr, textStatus, errorThrown) //jqXHR, textStatus, errorThrown
                    {
                        if( jqXhr.status === "422" ) {
                            //do error
                        } else {
                            //do error
                        }
                    }
                });
            }
            return false; //not to post the form physically
    

  7. 7.당신은 이미 위의 제안을 완료하고 여전히 문제가 발생합니다.

    당신은 이미 위의 제안을 완료하고 여전히 문제가 발생합니다.

    반드시 그 ENV 변수를 확인하십시오 :

    SESSION_SECURE_COOKIE
    

    지역에 같은 당신이하는 SSL 인증서가없는 경우 false로 설정됩니다.


  8. 8.당신이 파일에서로드의 .js 인 경우 당신은 당신이의 .js를 가져 어디에 "주".blade.php 파일에 csrf_token의 변수를 설정하고 아약스 호출에서 변수를 사용해야합니다.

    당신이 파일에서로드의 .js 인 경우 당신은 당신이의 .js를 가져 어디에 "주".blade.php 파일에 csrf_token의 변수를 설정하고 아약스 호출에서 변수를 사용해야합니다.

    index.blade.php

    ...
    ...
    <script src="{{ asset('js/anotherfile.js') }}"></script>
    <script type="text/javascript">
            var token = '{{ csrf_token() }}';
    </script>
    

    anotherfile.js

    $.ajax({
        url: 'yourUrl',
        type: 'POST',
        data: {
            '_token': token
        },
        dataType: "json",
        beforeSend:function(){
            //do stuff
        },
        success: function(data) {
            //do stuff
        },
        error: function(data) {
            //do stuff
        },
        complete: function(){
            //do stuff
        }
    });
    

  9. 9.당신이 Laravel 정책을 사용하여 컨트롤러 액션을 인증하는 경우 당신이하는 csrf_token이 비록 당신이 아니라 419 응답을 할 수 있습니다. 이 경우 당신은 당신의 정책 클래스에 필요한 정책 기능을 추가해야합니다.

    당신이 Laravel 정책을 사용하여 컨트롤러 액션을 인증하는 경우 당신이하는 csrf_token이 비록 당신이 아니라 419 응답을 할 수 있습니다. 이 경우 당신은 당신의 정책 클래스에 필요한 정책 기능을 추가해야합니다.


  10. 10.일부 심판 =>

    일부 심판 =>

    ...
    <head>
        // CSRF for all ajax call
        <meta name="csrf-token" content="{{ csrf_token() }}" />
    </head>
     ...
     ...
    <script>
        // CSRF for all ajax call
        $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': jQuery('meta[name="csrf-token"]').attr('content') } });
    </script>
    ...
    

  11. 11.그냥 폼 데이터를 직렬화하고 문제가 해결 얻을.

    그냥 폼 데이터를 직렬화하고 문제가 해결 얻을.

    data: $('#form_id').serialize(),
    

  12. 12.당신은 CSRF 토큰을 얻을 수 있습니다 ..

    당신은 CSRF 토큰을 얻을 수 있습니다 ..

    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
    });
    

    같은 문제가 일을하는 상승 후, 그냥이 메타 태그 추가 <메타 이름 = "CSRF 토큰"내용 = "{{csrf_token ()}}">

    이 또한 오류가 발생 후에는 아약스 오류를 확인할 수 있습니다. 그리고 또한 아약스 오류를 확인

    $.ajax({
        url: 'some_unknown_page.html',
        success: function (response) {
            $('#post').html(response.responseText);
        },
        error: function (jqXHR, exception) {
            var msg = '';
            if (jqXHR.status === 0) {
                msg = 'Not connect.\n Verify Network.';
            } else if (jqXHR.status == 404) {
                msg = 'Requested page not found. [404]';
            } else if (jqXHR.status == 500) {
                msg = 'Internal Server Error [500].';
            } else if (exception === 'parsererror') {
                msg = 'Requested JSON parse failed.';
            } else if (exception === 'timeout') {
                msg = 'Time out error.';
            } else if (exception === 'abort') {
                msg = 'Ajax request aborted.';
            } else {
                msg = 'Uncaught Error.\n' + jqXHR.responseText;
            }
            $('#post').html(msg);
        },
    });
    

  13. 13.

    formData = new FormData();
    formData.append('_token', "{{csrf_token()}}");
    formData.append('file', blobInfo.blob(), blobInfo.filename());
    xhr.send(formData);
    

  14. 14.2019 Laravel 업데이트하지 마십시오, 내가이 게시하지만 브라우저를 사용하는 나 같은 사람들 개발자를 위해 위의 Laravel 5.8에 API를 가져옵니다 생각했다. 당신은 헤더 매개 변수를 통해 토큰을 전달해야합니다.

    2019 Laravel 업데이트하지 마십시오, 내가이 게시하지만 브라우저를 사용하는 나 같은 사람들 개발자를 위해 위의 Laravel 5.8에 API를 가져옵니다 생각했다. 당신은 헤더 매개 변수를 통해 토큰을 전달해야합니다.

    var _token = "{{ csrf_token }}";
    fetch("{{url('add/new/comment')}}", {
                    method: 'POST',
                    headers: {
                        'X-CSRF-TOKEN': _token,
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify(name, email, message, article_id)
                }).then(r => {
                    return r.json();
                }).then(results => {}).catch(err => console.log(err));
    

  15. 15.내 dev에 환경이 로그인 작동하지 않았다, 그래서 나는 SESSION_SECURE_COOKIE = 거짓을 추가, 그래서 나는, 참으로 SESSION_SECURE_COOKIE 세트가 있었다 내 dev에 .env의 파일과 모든 일에 내 실수가 session.php 파일을 변경하는 대신 .env의 파일에 변수를 추가 한 미세.

    내 dev에 환경이 로그인 작동하지 않았다, 그래서 나는 SESSION_SECURE_COOKIE = 거짓을 추가, 그래서 나는, 참으로 SESSION_SECURE_COOKIE 세트가 있었다 내 dev에 .env의 파일과 모든 일에 내 실수가 session.php 파일을 변경하는 대신 .env의 파일에 변수를 추가 한 미세.


  16. 16.u는 당신의 아약스 제출 요청 (POST)에이를 포함하도록 잊어 버린 경우이 오류도 발생 ContentType을 : 거짓, processData : 거짓,

    u는 당신의 아약스 제출 요청 (POST)에이를 포함하도록 잊어 버린 경우이 오류도 발생 ContentType을 : 거짓, processData : 거짓,


  17. 17.이미 토큰 CSRF 전송되었던 경우에도이 오류가 발생했습니다. 밝혀졌다 서버에 남아 더 이상 공간이 없었다.

    이미 토큰 CSRF 전송되었던 경우에도이 오류가 발생했습니다. 밝혀졌다 서버에 남아 더 이상 공간이 없었다.


  18. 18.이것은 그 경우에 당신이 양식을 필요로하지 않는 좋은 작품.

    이것은 그 경우에 당신이 양식을 필요로하지 않는 좋은 작품.

    헤더에 이것을 사용 :

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    당신의 자바 스크립트 코드에서이 :

    $.ajaxSetup({
            headers: {
            'X-CSRF-TOKEN': '<?php echo csrf_token() ?>'
            }
        });
    

  19. 19.콘솔에 419 개 알 수없는 상태를 해결하는 간단한 방법은 FORM이 스크립트 내부를 넣어하는 것입니다. {{csrf_field ()}}

    콘솔에 419 개 알 수없는 상태를 해결하는 간단한 방법은 FORM이 스크립트 내부를 넣어하는 것입니다. {{csrf_field ()}}


  20. 20.이것은 나를 위해 일한 :

    이것은 나를 위해 일한 :

    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': "{{ csrf_token() }}"
      }
    });
    

    이 세트 일반 AJAX 호출 후. 예:

        $.ajax({
           type:'POST',
           url:'custom_url',
    
           data:{name: "some name", password: "pass", email: "test@test.com"},
    
           success:function(response){
    
              // Log response
              console.log(response);
    
           }
    
        });
    
  21. from https://stackoverflow.com/questions/46466167/laravel-5-5-ajax-call-419-unknown-status by cc-by-sa and MIT license