Php LexikJWTAuthenticationBundle生成令牌

Php LexikJWTAuthenticationBundle生成令牌,php,symfony,lexikjwtauthbundle,Php,Symfony,Lexikjwtauthbundle,我正在使用LexikJWTAuthenticationBundle生成json令牌,我的问题是,在验证用户是否在BD中后,我不知道如何生成令牌。我可以提供帮助吗 我的密码 public function postLoginAction(Request $request) { $user = new Utilizador(); $json = json_decode($request->getContent(), true); $us

我正在使用LexikJWTAuthenticationBundle生成json令牌,我的问题是,在验证用户是否在BD中后,我不知道如何生成令牌。我可以提供帮助吗

我的密码

 public function postLoginAction(Request $request)
    {
        $user = new Utilizador();
        $json = json_decode($request->getContent(), true);
        $user->setUser($json['user']);
        $user->setPass($json['pass']);
        $em = $this->getDoctrine()->getManager();
        $existuser = $em->getRepository('RestBundle:Utilizador')->findOneBy(array(
            'user' => $user->getUser(),
            'pass' => $user->getPass()
        ));
        if($existuser)
    {
        $token =  $this->get('lexik_jwt_authentication.jwt_manager')->create($user);
        return new JsonResponse(['token' => $token]);
    }

    }
我的实用课

 <?php

namespace RestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * Utilizador
 *
 * @ORM\Entity
 * @ORM\Table(name="utilizador")
 */
class Utilizador implements UserInterface
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nome", type="string", length=100, nullable=true)
     */
    private $nome;

    /**
     * @var string
     *
     * @ORM\Column(name="user", type="string", length=100, nullable=true)
     */
    private $username;

    /**
     * @var string
     *
     * @ORM\Column(name="pass", type="string", length=100, nullable=true)
     */
    private $pass;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=100, nullable=true)
     */
    private $email;



    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nome
     *
     * @param string $nome
     *
     * @return Utilizador
     */
    public function setNome($nome)
    {
        $this->nome = $nome;

        return $this;
    }

    /**
     * Get nome
     *
     * @return string
     */
    public function getNome()
    {
        return $this->nome;
    }

    /**
     * Set user
     *
     * @param string $username
     *
     * @return Utilizador
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Get user
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * Set pass
     *
     * @param string $pass
     *
     * @return Utilizador
     */
    public function setPassword($pass)
    {
        $this->pass = $pass;

        return $this;
    }

    /**
     * Get pass
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->pass;
    }

    /**
     * Set email
     *
     * @param string $email
     *
     * @return Utilizador
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    /**
     * Get email
     *
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }

    public function getRoles()
    {
        return array('ROLE_USER');
    }

    public function eraseCredentials()
    {
    }
    public function getSalt()
    {
        return null;
    }
}
另一个API类

<?php
/**
 * Created by PhpStorm.
 * Date: 08/08/16
 * Time: 18:28
 */

namespace RestBundle\Controller;


use RestBundle\Form\StatusType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpKernel\Exception\HttpException;

use RestBundle\Entity\Status;
class StatusController extends FOSRestController
{

    public function getStatusAction()
    {
        $em = $this->getDoctrine()->getManager();
        $user = $em->getRepository('RestBundle:Status')->findAll();

        return $user;
    }

    public function getStatuAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $user = $em->getRepository('RestBundle:Status')->find($id);

        if (!$id) {
            throw new HttpException(400, "Invalid id");
        }


        return $user;
    }

    public function postStatusAction(Request $request)
    {
        $user = new Status();
        $json = json_decode($request->getContent(), true);
        $user->setNome($json['nome']);
        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();
        return $user;
    }

}

以下是如何从有效的安全用户创建令牌:

$token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user);
您可以直接尝试,但我想它对您不起作用,因为您的用户实体看起来非常定制。
要使其工作,您的用户实体必须实现

为此,您应该真正配置实体用户提供程序,而不是通过实体管理器从控制器手动加载用户。 看

希望这能帮助你走上正确的道路

编辑:

下面是一个完整的工作示例,说明如何从数据库加载用户并使用此捆绑包对其进行身份验证:


也可以看到这个相关问题:当我使用令牌调用API时,我现在返回一个令牌,她返回这个
{“code”:401,“message”:“Username\“master\”不存在。}
这意味着没有属性
Username
等于
master
的用户。您是否使用
用户名
作为属性名(您可以在捆绑包上配置另一个)?否则,您的用户是否在db中正确注册了?我在帖子中添加了一个类Utilizador,是的,用户存在于bd中将属性的名称
$user
更改为
Utilizador
中的
$username
(也在getUsername()和setUser()中调整属性名称)您应该可以。随时通知我。顺便说一句,按照惯例,应该调用
setUsername()
$token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user);