php - Laravel API 身份验证重定向到登录而不是简单的 401 页面

标签 php laravel laravel-5.5

我正在使用 Laravel 5.5.34,这是我第一次创建 API。

我添加了一个 api_token列到用户表并在注册时生成 token 。

后来我开了routes/api.php文件并添加以下代码:

Route::middleware( 'auth:api' )->get( 'test', function( Request $request ){
    dd( \Auth::user() );
});

当我发送 api_token 时,此代码工作正常在 POST 数据中,但如果我不发送,它会重定向到登录页面而不是 401 页面,即使我发送了 Accept: application/json标题。

如何使它重定向到 401 页面?

最佳答案

设置标题“接受:应用程序/json”必须足够。

Laravel 5.5 处理 App\Exceptions\Handler.php 中的 «AuthenticationException»
“未经验证”的方法。它的样子:

 protected function unauthenticated($request, AuthenticationException $exception)
{
    //dd($request);
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest(route('login'));
}

在“expectsJson”方法中 https://laravel.com/api/5.3/Illuminate/Http/Request.html#method_expectsJson , 执行检查请求头“Accept”包含“json”模式:
return isset($acceptable[0]) && Str::contains($acceptable[0], ['/json', '+json']);

因此,您必须检查您的请求是否实际返回 在 $request→expectsJson() 调用上。在请求中设置 Accept header 时可能会出错。

关于php - Laravel API 身份验证重定向到登录而不是简单的 401 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49358484/

相关文章:

php - 在url中使用主键自增

javascript - Laravel 验证复选框

php - Laravel - 如何使用绑定(bind)参数获取查询?

javascript - 如何解析 XML AJAX 响应

php - 将嵌套数组转换为 laravel 中的特定选择框

php - 用于解析 .strings 文件的正则表达式

php - 外键违规 : 7 ERROR

php - 使用 codeigniter 比较数组中的数据并计算它在数据库中出现的实例数

Php从多个MySQL表中获取行

php - Laravel 黄昏 'No tests executed!'