簡體   English   中英

獲得身份驗證的用戶onAuthenticationSuccess

[英]getting authenticated user onAuthenticationSuccess

我有以下身份驗證處理程序:

class LoginAuthSuccessHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface
{
    private $router;
    private $container;

    /**
    * Constructor
    * @param RouterInterface   $router
    */
    public function __construct(RouterInterface $router, $container)
    {
        $this->router = $router;
        $this->container = $container;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        if ($request->isXmlHttpRequest()) {
            $user =  $this->container->get('security.context')->getToken()->getUser();
            $result = array('success' => true, 'user' => $user);
            return new Response(json_encode($result));
        } else {
            $route = $this->router->generate('ShopiousMainBundle_profile');

            $referrer_url = $request->server->get('HTTP_REFERER');
            if (strstr($referrer_url, '/items/')) {
                 $route = $referrer_url;
            }

            return new RedirectResponse($route);
        }
    }

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {
        if ($request->isXmlHttpRequest()) {
            $result = array('success' => false, 'message' => $exception->getMessage());
            return new Response(json_encode($result));
        } else {
            // Handle non XmlHttp request here
        }
    }
}

為什么會這樣:

$user =  $this->container->get('security.context')->getToken()->getUser();

返回null? 我如何在這一點上獲得身份驗證的用戶?

您應該將收到的$token變量用作參數,而不是$this->container->get('security.context')->getToken()

$user = $token->getUser();

請注意,您未在security.yml中設置提供商。

security:
 provider:
  example:
   entity: {class Acme\AuctionBundle\Entity\User, property: username}

用您的替換包和實體。

我發現的唯一方法是注入entityManager,

calls:
    - [setEntityManager,[@doctrine.orm.entity_manager]]

從請求中獲取用戶名,並使用該用戶名查詢用戶。

$userRepo->findByEmail($request->get('_username'));
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
    $user = $token->getUser();
}

就這樣 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM