2016-08-23 7 views
2

Я использую LexikJWTAuthenticationBundle для генерации токена json, моя проблема в том, что я не знаю, как я создаю токен после проверки того, что пользователь находится в BD. Я могу помочь?LexikJWTAuthenticationBundle generate Token

Мой код.

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]); 
    } 

    } 

Мои Utilizador Класс

<?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; 
    } 
} 

security.yml

security: 

    # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 
    providers: 
     in_memory: 
      memory: ~ 

    firewalls: 

     login: 
      pattern: ^/api/logins 
      stateless: true 
      anonymous: true 

     api: 
      pattern: ^/api 
      stateless: true 
      lexik_jwt: ~ 

    access_control: 
     - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/api,  roles: IS_AUTHENTICATED_FULLY } 

Другой 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; 
    } 

} 

ответ

1

Вот как создать маркер из действительный SECURI ти Пользователь:

$token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user); 

Вы можете сразу попробовать, но я предполагаю, что это не будет работать для вас, как ваш объект Пользователь выглядит очень обычай.
Чтобы это сработало, ваш пользовательский объект должен реализовать Symfony\Component\Security\Core\User\UserInterface.

Для этого вместо ручной загрузки пользователей с вашего контроллера через диспетчер сущностей вы должны действительно настроить Entity User Provider. См. How to load security users from the database

Надеюсь, что это поможет вам пойти правильным путем.

EDIT:

Вот полностью рабочий пример того, что вы должны сделать для пользователей загрузки из базы данных и их подлинность этой пачке:

https://github.com/chalasr/lexik-jwt-authentication-sandbox

+0

Смотрите этот родственный вопрос тоже : http://stackoverflow.com/questions/35120309/symfony-2-fosuserbundle-with-rest-login-and-registration/35120807#35120807 – chalasr

+0

Я получил, что я возвращаю токен, когда я звоню в API с токен она возвращает этот '{" code ": 401," message ":" Userna me \ "master \" не существует. "}' – user26776

+0

Это означает, что нет пользователя с свойством 'username', равным' master'. Вы используете 'username' как имя свойства (вы можете настроить другое в комплекте)? В противном случае ваш пользователь правильно зарегистрирован в db? – chalasr