Laravel $request->expectsJson()
Posted
技术标签:
【中文标题】Laravel $request->expectsJson()【英文标题】: 【发布时间】:2017-12-14 09:31:36 【问题描述】:我正在为我的 Laravel 应用程序进行 Ajax 登录。
我正在使用 Angular:
$http(
method: 'POST',
url: '/admin/login',
headers:
'Content-Type': 'application/json'
,
data: email:$scope.email,password:$scope.password
)
这个请求工作正常,我的问题是 Laravel 的响应总是重定向我,因为它应该 如果我没有发送 JSON:
protected function sendFailedLoginResponse(Request $request)
$errors = [$this->username() => trans('auth.failed')];
if ($request->expectsJson())
return response()->json($errors, 422);
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors($errors);
那是 Laravel 框架代码。它不断将我重定向回来,但我想触发条件 if ($request->expectsJson())
并获得 JSON 响应而不是重定向。
为了触发该条件,我缺少什么?
我什至补充说:
headers:
'Content-Type': 'application/json','X-Requested-With' :'XMLHttpRequest'
而且还是不行。
expectsJson():
public function expectsJson()
return ($this->ajax() && ! $this->pjax()) || $this->wantsJson();
我的标题:
Accept:application/json, text/plain, /
接受编码:gzip,放气
Accept-Language:en-US,en;q=0.8
连接:保持活动状态
内容长度:57
内容类型:应用程序/json
X-Requested-With:XMLHttpRequest
出于安全原因,我没有包含令牌/cookie 和原始 url,但它们在那里。
编辑:我尝试清除工匠缓存,但仍然没有。
php artisan cache:clear
还有
composer dump-autoload
【问题讨论】:
您必须添加Accept
标头,如here 所述
@Maraboc 我的 Accept 标头已经是 application/json, text/plain, */*
用户是否已经登录?! Guest 中间件应用于 AuthController 的所有路由,getLogout 除外。因此,对这些路由的任何 ajax 调用都会重定向到主路由
@Leo_Kelmendi 不,我提供的凭据不正确,我没有登录。
你能给我们这个$request->expectsJson()
的输出吗?条件可能不正确,所以它会跳过那个if并重定向回来
【参考方案1】:
您应该使用Accept
键而不是Content/type
。更多详情请查看this github discussion
【讨论】:
祝福你!我们使用content/type
在这个问题上猛烈抨击了一段时间。以上是关于Laravel $request->expectsJson()的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 刀片“request()->is()”语法问题
laravel如何知道request()->getHttpHost()的值