[英]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.