2017-05-10 48 views
0

我试图做一个模态登录,并在用户输入正确的电子邮件&密码后,我需要获取登录用户的ID(而模式仍然打开,而不刷新页)。来自数据库的users表中的id。Symfony3认证后获得安全令牌

通常情况下,我得到以下行ID:

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

在模式的情况下,我送形式的LoginController和控制器中我有:

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

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

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

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

如果我试着这样做:

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

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

我的作用域是获取$ account对象。

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

感谢,

+0

你做手工用户认证?或者你已经使用了标准的'check_path'路由? – yceruto

+0

我尝试了两种方法,但只在check_path路由中通过symfony正确进行了认证。任何其他路径不会生成任何安全令牌 – TeoM

回答

1

我试图让模态登录和用户输入正确的 电子邮件&密码后,我需要登录用户(的ID,而 模式仍打开,不刷新页面)。来自数据库的 用户表的id。

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

+0

我已经实现了该处理程序,但从来没有想过在onAuthenticationSuccess中执行以下操作:$ id = $ token-> getUser() - > getId();谢谢。 – TeoM

0

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

相关问题