2016-04-04 49 views
3

我將解釋我的問題。我使用傳遞用戶名和加密密碼的API登錄用戶,所以我無法僅通過用戶名加載用戶。如何創建自定義在symfony中記住我的提供程序

我正在使用GUARD獲取用戶詳細信息併爲給定的防火牆授權用戶。到現在爲止還挺好。

我的問題開始時,我想激活記住我。顯然,由於用戶沒有存儲在我的數據庫中,記住我沒有按名稱加載用戶。

目前,我克服了實現類RememberMeServicesInterface的問題,並在擴展AbstractFormLoginAuthenticator的守衛類中使用我的新類。

說實話對我來說,這感覺就像一個黑客,因爲我非常確定必須有更好的方式來做到這一點。

檢查代碼我注意到Symfony有2個類實現了RememberMeServiceInterface,TokenBasedRememberMeServices和PersistentTokenBasedRememberMeServices,有人可以解釋我怎麼注入我的RememberMeService並使用它來授權我的用戶?

在此先感謝社區的幫助。

回答

6

我終於找到了一種實現自定義的方式記住我。 這些步驟如下:

1)創建一個擴展的Symfony \包\ SecurityBundle \ DependencyInjection \安全\廠\ RememberMeFactory類

此類重寫信息getKey()的自定義鍵和創建(),所以我可以注入自己的令牌服務security.authentication.rememberme.services.MYCUSTOMTOKENSERVICE

2)創建一個擴展的Symfony \分量\安全令牌服務\ HTTP \與rememberMe \ TokenBasedRememberMeServices,這樣我可以用我的身份驗證邏輯和我的自定義UserProvider功能

3)創建一個擴展的Symfony \分量\安全\ HTTP \與rememberMe \ ResponseListener

4)綁定在一起,我的服務YML文件

customlistener.security.authentication.listener監聽器: 類:### ## 市民:假

security.authentication.rememberme.services.customtokenservice: 類:### 父: 「security.authentication.rememberme.services.abstract」 摘要:真正

5)在security.yml中,我使用我在getKey中使用的字符串來回憶我的聽衆自定義記憶我與記憶我的相同選項密鑰

工作就像一個魅力!

+0

感謝您發佈此信息。你是否能夠將這一點與Guard實現結合在一起? –

+0

@DebreczeniAndrás您是否嘗試過類似於soipo的做法?我很想知道答案,如果這是一個可行的解決方案 – Christian

+0

@Christian不,還沒有。我最近設法升級到了symfony 2.8,所以還沒有讓我使用Guard。一旦我解決了問題,我一定會發布我的解決方案。 –

相關問題