使用Laravel Sanctum Api显示经过身份验证的用户

tkclm6bt  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(272)

我想显示已验证用户的数据,并在用户未通过验证时生成一个状态代码和一条状态消息。我使用Laravel API和Sanctum,这是我所尝试的:

public function me(Request $request){    
    
    $user = $request->user();

    if($user)
    {
    return response()->json([
        'status'=>200,
        'user'=>$user
    ]);
    
} else {
    return response()->json([
        'status'=>401,
        'message'=>'No access'
    ]);
}

}

问题是,它在通过身份验证时显示状态200,而在未通过身份验证时不显示状态401代码。

{
"message": "Unauthenticated."
}

在认证中还涉及到一个不记名令牌。

bjg7j2ky

bjg7j2ky1#

首先,您需要使用$request-〉user()方法检查用户是否通过了身份验证,如果返回null,则意味着用户未通过身份验证,您可以返回相应的响应,其中包含状态代码401和错误消息。
要检查用户是否经过身份验证,可以使用Laravel中的Auth::check()方法,如下所示:

public function me(Request $request){    
    
    if(Auth::check())
    {
        $user = $request->user();

        return response()->json([
            'status'=>200,
            'user'=>$user
        ]);

    } else {
        return response()->json([
            'status'=>401,
            'message'=>'No access'
        ]);
    }

}

或者,也可以使用$request-〉user()方法,检查它是否返回空值,如下所示:

public function me(Request $request){    
    
    $user = $request->user();

    if($user)
    {
        return response()->json([
            'status'=>200,
            'user'=>$user
        ]);

    } else {
        return response()->json([
            'status'=>401,
            'message'=>'No access'
        ]);
    }

}

在这两种情况下,如果用户未通过身份验证,它将返回一个响应,其中包含状态代码401和错误消息“No access”。

unguejic

unguejic2#

如果你确认令牌已经涉及到Authorization头,也许你需要检查一些这样的步骤:
您需要验证是否已在用户模型中从包Laravel\Sanctum\HasApiTokens添加HasApiTokens
之后,你可以检查路由器中间件。你可以使用中间件auth:sanctum保护端点。如果你使用中间件能力,也许你也可以检查它。
转到config/cors.php,启用supports_credentials为真。
如果你在使用Frontend应用程序之前尝试过,你有没有在postman上尝试过?

相关问题