如何在使用jwt令牌时检测用户(Slim-jwt-auth)

时间:2016-08-30 15:01:48

标签: authentication jwt slim

我目前正在使用Slim with slim-jwt-auth。

我的项目基于纤细的骨架(https://github.com/tuupola/slim-api-skeleton)。 我只需要为创建令牌的用户提供路由。

我已使用以下代码完成此操作:

        //check if it is the right user
        $user = \User::find($args["uid"]);

        $token = $request->getHeader('HTTP_AUTHORIZATION');                
        $token = str_replace("Bearer ", "", $token);
        $secret = getenv("JWT_SECRET");
        $decoded = JWT::decode($token[0], $secret, array("HS256"));

        if ($decoded->sub != $user->email) 
        {
            throw new ForbiddenException("User not allowed to read.");
        }

这是对的吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这是一种方法。虽然我不会手动解析令牌。默认情况下,JWT的解析值存储在$request->token属性中。使用此功能,您可以将代码缩短为以下内容。

$app->get("/user/{uid}", function ($request, $response, $arguments) {
    $user = \User::find($arguments["uid"]);

    $token = $request->getAttribute("token");

    if ($token->sub !== $user->email) ) {
        throw new ForbiddenException("User not allowed to read.");
    }
});

您可以使用attribute设置更改此行为。