我的POST ajax请求在Laravel Controller

时间:2017-09-07 08:47:02

标签: ajax laravel vue.js axios http-response-codes

我将一个POST Ajax请求发送到Laravel控制器,但是我得到了一个302 Found响应代码。

控制器是Laravel的Auth软件包提供的ForgotPasswordController,所以没什么特别的。

它的构造函数中有guest虚拟机中间件,我发现如果从构造函数中删除此中间件,Ajax请求将正常工作(它返回200响应代码)。

Ajax请求包含X-CSRF-TOKENX-XSRF-TOKEN标头,所以我认为没有遗漏。

我正在使用Axios库从VueJS密码重置表单发送此Ajax请求。

如果控制器具有访客中间件,为什么我的POST请求不起作用?

以下是随请求发送的标头:

POST /password/email HTTP/1.1  
Host: myapp.dev  
Connection: keep-alive  
Content-Length: 37  
Pragma: no-cache  
Cache-Control: no-cache  
Origin: http://myapp.dev  
X-XSRF-TOKEN: eyJpdiI6IjRqTk1yTXFsXC9FVlRzckF0dUM4azdRPT0iLCJ2YWx1ZSI6IjY0MUZzaEpCTXJDcUhzUGhcL2dzYVJmalQrR3pwV3IzYWxiTSt4dVwvN2VVKzJ4b2t3XC9GcVhJcllmK3pQYVV4VGFIZG4wZ0s3NlNCTG01WEl6YzBCY2NRPT0iLCJtYWMiOiIwYmNjOTRiZGJjZTM2YjYyMWJiMzRhNTlkOTkwOWU4Y2M4NmYzYzI5NjhiMTU4MDdiMGJkMmJhYmMwODEzMDhjIn0=  
X-CSRF-TOKEN: nejsetydvFWgeqppZc5XQtX04b5AdXlsTKSgaydj  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)  
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
Content-Type: application/json;charset=UTF-8  
Accept: application/json, text/plain, */*  
X-Requested-With: XMLHttpRequest  
Referer: http://myapp.dev/password  
Accept-Encoding: gzip, deflate  
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4  
Cookie: XSRF-TOKEN=eyJpdiI6IjRqTk1yTXFsXC9FVlRzckF0dUM4azdRPT0iLCJ2YWx1ZSI6IjY0MUZzaEpCTXJDcUhzUGhcL2dzYVJmalQrR3pwV3IzYWxiTSt4dVwvN2VVKzJ4b2t3XC9GcVhJcllmK3pQYVV4VGFIZG4wZ0s3NlNCTG01WEl6YzBCY2NRPT0iLCJtYWMiOiIwYmNjOTRiZGJjZTM2YjYyMWJiMzRhNTlkOTkwOWU4Y2M4NmYzYzI5NjhiMTU4MDdiMGJkMmJhYmMwODEzMDhjIn0%3D; laravel_session=eyJpdiI6IkJnczRHV3NcLzhLbzZWaUlvTTI2cFlBPT0iLCJ2YWx1ZSI6IkpQYytLXC9pQ1R3MTZlaEx2QWJ4bGpSd21BV25jelJKVDJkQVdcL25GSG4rQkpQc1duZHIrTjErOGt3bk5BVVVcL3FTK1c2XC83Y1NqTmxBaVZ1bkQ2TWV5Zz09IiwibWFjIjoiNzg4Y2UyNWQ0ODcxMWNkNWE3MmU4ZDY1MmIyNTE0NDgwMzFmM2ZjYzkxMzM5ZGM5ZTk5MDI4NjE4OGRkNmJjYyJ9

3 个答案:

答案 0 :(得分:2)

好的,我发现......这只是我在做这些请求时经过身份验证的。因此,访客中间件正在重定向我......对我感到羞耻!

答案 1 :(得分:1)

你必须仔细观察你的控制器。你必须返回json。另请查看浏览器中的网络控制台。如果响应代码是302,则有一个位置。因此,如果某个位置是登录页面 - 验证未在中间件中传递

答案 2 :(得分:0)

302响应通常是因为您的请求被laravel重定向。如果您希望json响应不要忘记在标题请求中添加Accept: 'application/json',那么您将看到实际错误