Ajax 中的 Laravel 5 X-CSRF-TOKEN 500(内部服务器错误)

Posted

技术标签:

【中文标题】Ajax 中的 Laravel 5 X-CSRF-TOKEN 500(内部服务器错误)【英文标题】:Laravel 5 X-CSRF-TOKEN 500 (Internal Server Error) in Ajax 【发布时间】:2018-07-21 20:51:54 【问题描述】:

您好,我已经使用 Ajax 更改密码(这是代码的简短版本):

var password = document.querySelector('[name="password"]').value;

    action = 'http://localhost:8012/market2/market2/public/account/query/';

    if (window.XMLHttpRequest) 
      xmlhttp = new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari
     else 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
    

    xmlhttp.open("post",action + password, true);
    xmlhttp.setRequestHeader("X-CSRF-TOKEN", document.getElementById('token-csrf').value);

    xmlhttp.onreadystatechange=function() 
      if (this.readyState == 4 && this.status == 200) 

        if (this.responseText == "false") 
            document.getElementById("error_password").innerhtml = "You actually password is wrong!";
            return false;
         else 
            document.getElementById("error_password").innerHTML = "OK";
            return true;
        

      
    


    xmlhttp.send();


还有我的 csrf 令牌: <input type="hidden" name="_token" id="token-csrf" value=" csrf_token() ">

我不知道我是否正确地将参数X-CSRF-TOKEN 添加到我的脚本中。首先我有错误ajax 419 (unknown status),所以我添加了X-CSRF-TOKEN,现在我有错误500 (Internal Server Error)。我也试过这个:Laravel 5.5 ajax call 419 (unknown status)

编辑帖子:

这不是我的查询方法:

public function queryPass($pass) 

  $user = Auth::user();
  $current_password = $user->password;

  if(Hash::check($pass, $current_password)) 

    $updatePassword = App\User::where('id', $user->id)->update(['password' => bcrypt($pass)]);
    echo "true";

   else 

    echo "false";
    die;

  


还有路线:

Route::get('account/query/pass?', 'UsersController@queryPass');

【问题讨论】:

500是服务器状态码,请提供后端码 转到storage/logs/laravel.log 清除其中的内容,然后再次导致错误,再次转到storage/logs/laravel.log,从中复制代码,然后粘贴paste.laravel.io @MahdiYounesi 我编辑我的帖子 能否包含错误堆栈跟踪,以便我们找出错误发生的位置? 你在php端做什么?你得到了用户的新密码,然后呢? 【参考方案1】:

第一个问题是他错过了控制器顶部的use Illuminate\Support\Facades\Hash;,他使用了use Hash;,当我们解决的第二件事是,他从控制器内部返回一个布尔值,而他应该返回实现__toString 方法或字符串的对象,因此在这种情况下他返回了正确的响应字符串“true”和“false”

【讨论】:

再次感谢您的帮助;)

以上是关于Ajax 中的 Laravel 5 X-CSRF-TOKEN 500(内部服务器错误)的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.5 上使用 axios 发布请求

laravel 5中的ajax表单验证

laravel 5.2 ajax 调用中的 TokenMismatchException

laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?

如何修复 Laravel 5.8 Ajax 表单提交中的内部服务器错误

本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常