webman 使用 decodeJWT 接口 验证 userlogin 的 token 分享

shuke 4月前 454

在 DstController 类中,userlogin 方法生成了一个 JWT token,用于用户登录验证。要在 decodeJWT 方法中验证这个 token,你需要解码并验证这个 token 是否有效。以下是如何在 decodeJWT 方法中实现这一功能:

public function decodeJWT(Request $request)

{

    $token = $request->header('Authorization');

    $key = 'shuke';  // 使用与生成 token 相同的密钥

    try {

        $decoded = JWT::decode($token, new Key($key, 'HS256'));

        // Token 解码成功,可以根据需要进一步处理解码后的数据

        return $this->cb($decoded);

    } catch (\Exception $e) {

        // Token 验证失败的处理逻辑

        return $this->cb(null, false, $e->getMessage());

    }

}

这段代码首先从请求头中获取名为 Authorization 的 token,然后使用与 userlogin 方法相同的密钥和算法进行解码。如果 token 有效,它将返回解码后的数据;如果无效,它将捕获异常并返回错误信息。

最新回复 (1)
全部楼主
  • shuke 4月前
    2

    以上测试  错误 Unexpected control character found

    如果在解码 JWT 时遇到 "Unexpected control character found" 错误,这通常是由于 token 格式不正确或包含非法字符。这种情况可能是因为在发送或接收 token 时,token 被不正确地处理或修改了。 解决步骤: 检查 Token 的格式: 确保在发送请求时,Authorization 头部正确设置了 token,并且格式是 Bearer。你可能需要在获取 token 之前添加一步来处理或验证这个格式。 清理和验证 Token: 在解码之前,验证 token 是否只包含有效的 Base64 字符,并且没有包含控制字符或空格。 调试输出: 在尝试解码前,打印出 token 看看是否有明显的格式问题。 示例代码: 在 decodeJWT 方法中添加一些验证和格式化步骤:

    public function decodeJWT(Request $request)

    {

        $authHeader = $request->header('Authorization');

        if (preg_match('/Bearer\s(\S+)/', $authHeader, $matches)) {

            $token = $matches[1];

        } else {

            return $this->cb(null, false, "Token not found or invalid format");

        }

        $key = 'shuke';  // 使用与生成 token 相同的密钥

        try {

            $decoded = JWT::decode($token, new Key($key, 'HS256'));

            return $this->cb($decoded);

        } catch (\Exception $e) {

            return $this->cb(null, false, $e->getMessage());

        }

    }



    这段代码首先检查 Authorization 头是否包含 Bearer 标记,并从中提取 token。如果格式不正确,它将返回一个错误消息。这可以帮助确保传递给 JWT::decode 的 token 是干净且格式正确的。

返回