2014-05-10 3 views
0

를 인증하지 않고, 나는 다음과 같은 달성하려는 경우. 암호는 일반 텍스트입니다.확인은 사용자 자격 증명의 경기는 FOSUserbundle를 사용

2) 컨트롤러, 나는 평소와 같이 매개 변수를 구문 분석 : 자격 증명이 일치하는 경우

/** 
* @Route("/api/token",name="api_token") 
*/ 
public function tokenAction(Request $request) { 

    $username = $request->get('username'); 
    $password = $request->get('password'); 

    // ... 
} 

3) 마지막으로, 내가 뭔가를 반환합니다.

실제로 세션을 수정하지 않고, 즉 사용자를 실제로 인증하고 토큰을 설정하지 않고이 작업을 수행하고 싶습니다. 나는 신임장이 맞는지 만 확인하고 싶다.

UPDATE

허용 된 대답은하지만 당신이 활성 세션을 가지고 가정하에, 작동합니다.

/** 
* @Route("/api/token",name="api_token", options={"expose"=true}) 
*/ 
public function getTokenAction(Request $request) { 
    $username = $request->get('username'); 
    $password = $request->get('password'); 

    $user = $this->getDoctrine() 
       ->getRepository('YourUserClass') 
       ->findOneBy(["username" => $username]); 

    $encoder = $this->get('security.encoder_factory')->getEncoder($user); 

    $isValidPassword = $encoder->isPasswordValid($user->getPassword(), 
               $password, 
               $user->getSalt()); 

    if ($isValidPassword) { 
     // Handle success 
    } else { 
     // Handle error 
    } 
} 
+0

http://symfony.com/doc/current/components/security/authentication.html#using-password-encoders – qooplmao

답변

2

당신은에 인증 서비스를 사용한다 : 당신은 당신이 단순히 REST 층 등을 (내 유스 케이스이었다) 노출 사건을 해결하려면, 당신은 당신의 사용자 이름이 고유 가정, 다음을 수행 할 수 있습니다 컨트롤러에서 모든 코드를 작성하는 것은 모범 사례가 아닙니다. 어쨌든 대답에 사용할 수있는 내용은 다음과 같습니다.

/** 
* @Route("/api/token",name="api_token") 
*/ 
public function tokenAction(Request $request) { 

    $username = $request->get('username'); 
    $password = $request->get('password'); 

    // fetch your user using user name 
    $user = ... 

    //If your controller is extended from Symfony\Bundle\FrameworkBundle\Controller\Controller 
    $encoder = $this->get('security.encoder_factory')->getEncoder($user); 
    //If you are extending from other ContainerAware Controller you may have to do 
    //$this->container->get('security.encoder_factory')->getEncoder($user) 

    //Check your user 
    $isValidPassword = $encoder->isPasswordValid(
      $user->getPassword(), 
      $password, 
      $user->getSalt() 
    ); 

    if ($isValidPassword) { 
     //.... do your valid stuff 
    }else{ 
     //... Do your in valid stuff 
    } 
} 
관련 문제