Symfony3 在身份验证后获取安全令牌

Symfony3 get security token after authentication

我正在尝试进行模态登录,在用户输入正确的电子邮件和密码后,我需要获取已登录用户的 ID(模态仍处于打开状态,无需刷新页面)。来自数据库的用户 table 的 id。

通常,我通过以下行获取 ID:

$this->get('security.token_storage')->getToken()->getUser()->getId();

在模态情况下,我将表单发送到 LoginController 并且在控制器内部我有:

/** @var AuthenticationUtils $authenticationUtils */
$authenticationUtils = $this->get('security.authentication_utils');
$error = $authenticationUtils->getLastAuthenticationError();

如果我输入错误的凭据,它工作正常,显示:错误的凭据 如果我输入正确的凭据并执行 var_dump($error) 我得到 NULL。

如果我这样做 $error = $authenticationUtils->getLastAuthenticationError()->getToken();

我收到一个错误,说我尝试在空对象上应用 getToken。

如果我尝试这样做:

/** @var Accounts $account */
$account = $this->get('security.token_storage')->getToken()->getUser();
var_dump($account);

我得到同样的错误。 如果我刷新页面,我就登录了。

我的范围是获取$account对象。

如何在不刷新页面的情况下获取User(实体)?在同一个控制器中,就在 $authenticationUtils->getLastAuthenticationError()?

之后

谢谢,

I'm trying to make a modal login and after the user enters the correct email & password, I need to get the ID of the logged user (while the modal is still open, without refreshing the page). The id from the users table from the database.

因此您需要通过 AJAX 登录。否则您的页面将被刷新。使用 AJAX 会有另一个问题。根据某些情况,您将在登录后被重定向到另一个页面,这不是您想要的,因为您想要包含一些用户信息的响应。因此,您需要编写自己的身份验证处理程序。本文解释了如何:http://www.webtipblog.com/adding-an-ajax-login-form-to-a-symfony-project/

在 symfony 3 中:$id =$this->getUser()->getId()