我正在尝试使用带有新 Laravel 5.3 项目的 ajax 登录我的用户。
我已经生成了 auth 路由,这些路由已添加到我的 web.php:
Auth::routes();
我有一个带有电子邮件,密码输入和 csrf 字段的 html 表单。然后我也有这个 javascript 文件:
$("form.login").submit(function(e) {
e.preventDefault();
$.ajax({
method: "POST",
dataType: "json",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
},
data: $("form.login").serialize(),
url: "/login"
})
.done(function(data) {
console.log(data);
});
});
然而,当我发布它时,它显示在我的网络选项卡中:
它会重定向回原始页面,而不会返回任何数据。
它为什么这样做? 5.3 不再给 json 回复吗?
2 回答
完整解决方案:
嗨 reinierkors,
我也尝试用 5.3 版本做同样的事情,我终于解决了:)并且解决方案非常干净。
首先,我在AppHttpControllersApi下创建了一个名为Auth的新文件夹**,我这样做只是为了为 api 添加新的 auth 控制器所以我可以重写一些函数,然后我将 auth 控制器(LoginController,ForgotPasswordController,RegisterController)复制到这个新文件夹。
**在 LoginController 类中:**我重写了进行重定向的函数。
**第二个功能:**将在身份验证返回错误时自动调用。
最后一个功能:当用户在尝试 5 次登录尝试后被锁定时,将自动调用。
**在 RegisterController 类中:**我重写了重定向的函数。
**第二个功能:**将在注册返回成功时自动调用。
**在 ForgotPasswordController 类中:**我重写了正在进行重定向的函数。
我是怎么解决
从@iSensical得到一点帮助
在
app/Exceptions/Handler.php
内部有一个unauthenticated
函数,默认情况下,它知道请求是否需要expectsJson()
函数的json
答案。问题并非来自 Laravel 本身。令人惊讶的是,它是人为因素。我写了一段糟糕的代码。
我的 ajax 请求没有使用 Laravel 的直观标题。
我有这个:
我们可能使用了坏
Content-Type
。正确的是application/json
像这样: