Jwt 令牌解码 - Symfony 4

Posted

技术标签:

【中文标题】Jwt 令牌解码 - Symfony 4【英文标题】:Jwt Token decode - Symfony 4 【发布时间】:2020-05-23 01:51:39 【问题描述】:

我正在尝试解决与令牌请求相关的问题。这是我在控制器中的 newArticle 功能(添加新文章):

public function newArticle(Request $request, EntityManagerInterface $entityManager): View
    
        $data = json_decode($request->getContent(), true);
        $title = $data['title'];
        $content = $data['content'];
        //$published_at = $data['published_at'];
        $authorizationHeader = $request->headers->get('Authorization');
        list(,$token) = explode(' ', $authorizationHeader);
        $jwtToken = $this->JWTEncoder->decode($token);
        $user_id = $data[$jwtToken];
        $userId = $this->userRepository->findOneBy(['id' => $user_id['id']]);
        $article = new Article();
        $article->setTitle($title);
        $article->setContent($content);
        $article->setPublishedAt(new \DateTime());
        $article->setUser($userId);
        // Todo: 400 response - Invalid input
        // Todo: 404 response - Response not found
        // Incase our Post was a success we need to return a 201 HTTP CREATED response with the created object
        if(in_array('ROLE_USER', $article->getUser()->getRoles(), true)) 
            $entityManager->persist($article);
            $entityManager->flush();
            return View::create("You added an article successfully!", Response::HTTP_OK);
         else 
            return View::create(["You are not a user! So please register to add an article!"], Response::HTTP_BAD_REQUEST);
        
     

在添加令牌头授权之前它正在工作,现在我收到了这个错误:

"error": 
   "code": 500,
  "message": "Internal Server Error",
 "message": "Notice: Undefined offset: 1", 

谁能给我一些建议?

【问题讨论】:

【参考方案1】:

我觉得你的问题是这一行:

$user_id = $data[$jwtToken];

你应该重构它,认为它应该是这样的:

$user_id = $data['user_id'];

$user_id = $jwtToken['user_id'];

根据每个对象/数组包含的数据,您应该寻找的位置。首先,错误是调用数组上的偏移量,因此修复它应该没问题(或者从日志中获得更清晰的错误消息)

【讨论】:

以上是关于Jwt 令牌解码 - Symfony 4的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony 5 中创建 JWT 令牌?

使用 Symfony 5.3 检查 JWT (Firebase) 令牌

PHP JWT:: **解码** 过期令牌

JWT 令牌解码

在没有秘密的情况下解码 JWT 令牌

cakephp 中的 JWT 令牌解码