2016-08-23 2 views
2

を生成し、私の問題は、私は、私は、ユーザーがBDであることを確認した後、トークンを生成する方法がわからないということです。私は助けることができますか?LexikJWTAuthenticationBundleは、私はjsonのトークンを生成するために<strong>LexikJWTAuthenticationBundle</strong>を使用していトークン

マイコード。

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
ここ

有効なセキュリティユーザーからトークンを作成する方法であります

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

あなたは直接それを試すことができますが、私はあなたのユーザエンティティが非常にカスタムに見えるとして、それはあなたのために動作しませんね。
これを動作させるには、ユーザーエンティティでSymfony\Component\Security\Core\User\UserInterfaceを実装する必要があります。

エンティティマネージャを使用してコントローラから手動でユーザをロードする代わりに、実際にエンティティユーザプロバイダを設定する必要があります。 を参照してください。How to load security users from the database

希望すると、正しい方法で進むことができます。

編集:ここでは

はあなたのデータベースからロードするユーザーのために行うと、このバンドルでそれらを認証するために持っているものの完全に動作する例です。

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

これは 'master'に等しい' username'プロパティを持つユーザがいないことを意味します。あなたは 'username'をプロパティ名として使っていますか(バンドルに別のものを設定できますか?)さもなければ、あなたのユーザーはdbに正しく登録されていますか? – chalasr

関連する問題