2017-05-10 75 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()

相關問題