2016-12-23 50 views
0

我在我的symfony項目登錄表單(我在symfony的一個品牌小白),我想不同的反應,這取決於錯誤我得到。管理的Symfony BadCredentialsException碼

我讀的BadCredentialsException文檔和它的父類AuthenticationException,但每當我傾倒getLastAuthenticationError()與枝條沒有找到有關該錯誤的代碼,這是我得到什麼:

BadCredentialsException {#93 ▼ 
    -token: UsernamePasswordToken {#92 ▶} 
    #message: "Bad credentials." 
    #code: 0 
    #file: "C:\pathToProject\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php ◀" 
    #line: 90 
    -trace: {▶} 
} 

到目前爲止,我總是有0代碼。

還有其他的代碼嗎?我在哪裏可以在文檔中找到它們?

而且,這個例外似乎發生密碼是壞還是用戶不存在。有什麼辦法可以區分這兩個事件嗎?

回答

1

有沒有代碼,我意識到與ExceptionSymfony/Security組件相關聯。請注意,在異常中設置代碼通常不是(還沒有?)。您寧願在catch(Exception $e)聲明中使用TypeHinting來檢查Exception的類型。或者使用instanceof運算符。

BadCredentialsException如果憑據無效被拋出,並且如果用戶沒有找到。但是,您可以重新配置UserAuthenticationProvider以不「隱藏」它。

檢查UserAuthenticationProvider.php,有在構造函數中的一個選項。

您可以在security.yml設置它:

security: 
    hide_user_not_found: false 

根據你的使用情況,您可能還需要編寫自己的執行AuthenticationProviderInterface的。

+0

我想你錯過了我的問題^^ –

+0

的「小白」的一部分儘管如此,UserAuthenticationProvider.php構造的選擇似乎很有趣,但我沒有一個關於如何使用它的線索,因爲symfony中拋出該異常不求回報我。 –

+0

@DanChaltiel,這個選項基本上就是你想要的。如果選中[UserAuthenticationProvider.php#L72(https://github.com/symfony/security-core/blob/master/Authentication/Provider/UserAuthenticationProvider.php#L72),我在我的回答給了,你可以看到方法正在檢查此選項,以便拋出「UsernameNotFoundException」或「BadCredentialsException」。這不是一個n00b,它是花時間來檢查來源;) –