我在Laravel项目中使用AuthBasic进行API身份验证, 我有这个问题:当API请求身份验证无效而不是显示JSON响应时,它将返回401默认刀片视图模板。
代码如下:
app \ Http \ Middleware \ AuthBasic.php
public function handle($request, Closure $next)
{
if (Auth::onceBasic()) {
return response()->json(["message", "Authentication Required!"], 401);
} else {
return $next($request);
}
}
答案 0 :(得分:0)
从此行中删除401或将其更改为200:
(keyup.enter)="$event.preventDefault();"
请参阅参考资料,第二个参数是定义发送浏览器的http代码。 [401]在您的情况下。 https://laravel.com/api/5.7/Illuminate/Routing/ResponseFactory.html#method_json
答案 1 :(得分:0)
这可能会解决您的问题!
public function handle($request, Closure $next)
{
$result = Auth::onceBasic();
if($result === 401)
return response()->json(["message", "Authentication Required!"]);
else
return $next($request);
}
答案 2 :(得分:0)
因此,这是该问题的一半解决方案:
vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php
public function onceBasic($field = 'email', $extraConditions = [])
{
$credentials = $this->basicCredentials($this->getRequest(), $field);
if (! $this->once(array_merge($credentials, $extraConditions))) {
//return $this->failedBasicResponse();
return response()->json(["Message" => "Authentication Required!"], 401);
}
}
因此,它不会返回“失败的基本响应”,而是会返回JSON消息,但是我不想在Laravel Core Files中进行更改,因为在更新的情况下,它们将丢失!
那么有什么主意吗?
答案 3 :(得分:0)
找到了解决方案:
app \ Exceptions \ Handler.php
public function render($request, Exception $exception)
{
if ($request->is('api/*') || $request->wantsJson())
{
$json = [
'success' => false,
'error' => [
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
],
];
return response()->json($json, 401);
}
return parent::render($request, $exception);
}