2010-03-10 73 views
5

我正在用symgony1.4和doctrine1.2構建一個webapp,我想使用sfDoctrineGuardPlugin,但是我有一點問題。sfDoctrineGuardPlugin:用電子郵件登錄

sfDoctrineGuardPlugin是通過用戶名進行身份驗證,但我需要將其更改爲要求發送電子郵件。

任何想法如何做到這一點?

+0

它應該很簡單。開始搜索'用戶名'的插件,並開始替換:) – Raise 2010-03-10 19:05:40

回答

4

如何讓sfDoctrineGuard保持原樣,使用現有的用戶名字段,但保存電子郵件。您的用戶將使用他們的電子郵件登錄。默認的字段長度是VARCHAR(128),這對於任何電子郵件來說都是足夠的。如果我沒有記錯,唯一需要調整的是sfguard註冊,登錄等的表單標籤(無論您在哪裏展示它)。你基本上只是說「在這裏輸入電子郵件」而不是說「在此輸入用戶名」。

唯一的缺點是你失去了「用戶名」,但你總是可以把它放在與sfGuardUser相關的單獨配置文件中。

如果你不喜歡這種方法,你可以直接調整sfDoctrineGuardPlugin代碼,但它可能會導致一些頭痛的問題。

+0

驗證將是錯誤的,並且名稱也會在代碼中出錯......我不喜歡這樣做。 – alcuadrado 2010-03-17 16:53:49

+0

你的downvote是沒有道理的。您可以通過在頂部添加自定義驗證來輕鬆覆蓋驗證。而且你從未指定過要保持用戶名不變。 – Tom 2010-03-17 17:16:30

5

如果我正確理解你的問題,你想允許用電子郵件登錄。

sfDoctrineGuardPlugin支持使用電子郵件或用戶名登錄,但在5.0.0被打破,根據這個票:

http://trac.symfony-project.org/ticket/8919

有一個補丁存在。應用補丁並創建你的app.yml設置allow_login_with_email爲true的條目:

all: 
    sf_guard_plugin: 
    allow_login_with_email: true 

這是你需要什麼?

+0

這似乎並沒有實際工作,或者,您需要在驗證程序類的其中一個手動更改中使用retrieveByUsernameOrEmailAddress()而不是retrieveByUsername()。奇怪,不是你的答案,而是Symfony。 – Tom 2011-06-11 14:57:53

1

我會回答這個以防其他人讀這個問題尋求幫助。

正如oznek指出的那樣,您必須使用「allow_login_with_email」參數。

但是,插件(至少在5.0.0版本中)存在一個阻止其工作的錯誤。 你必須修改該文件:/sfDoctrineGuardPlugin/lib/validator/sfGuardValidatorUser.class.php 線44 替換此:

$user = $this->getTable()->retrieveByUsername($username); 

與此:

$user = $this->getTable()->$method($username); 

(以下簡稱 「$method」 變量被定義如上的幾行,但從未使用)

相關問題