sfDoctrineGuardPlugin:用电子邮件登录

问题描述:

我正在用symgony1.4和doctrine1.2构建一个webapp,我想使用sfDoctrineGuardPlugin,但是我有一点问题。sfDoctrineGuardPlugin:用电子邮件登录

sfDoctrineGuardPlugin是通过用户名进行身份验证,但我需要将其更改为要求发送电子邮件。

任何想法如何做到这一点?

+0

它应该很简单。开始搜索'用户名'的插件,并开始替换:) – Raise 2010-03-10 19:05:40

http://bluehorn.co.nz/2009/06/12/symfony-12-propel-and-sfguardplugin-email-login/

这已经写入了推进,但可能很容易适用教义。

+1

我做了一些或多或少的事 – alcuadrado 2010-03-17 16:54:35

如何让sfDoctrineGuard保持原样,使用现有的用户名字段,但保存电子邮件。您的用户将使用他们的电子邮件登录。默认的字段长度是VARCHAR(128),这对于任何电子邮件来说都是足够的。如果我没有记错,唯一需要调整的是sfguard注册,登录等的表单标签(无论您在哪里展示它)。你基本上只是说“在这里输入电子邮件”而不是说“在此输入用户名”。

唯一的缺点是你失去了“用户名”,但你总是可以把它放在与sfGuardUser相关的单独配置文件中。

如果你不喜欢这种方法,你可以直接调整sfDoctrineGuardPlugin代码,但它可能会导致一些头痛的问题。

+0

验证将是错误的,并且名称也会在代码中出错......我不喜欢这样做。 – alcuadrado 2010-03-17 16:53:49

+0

你的downvote是没有道理的。您可以通过在顶部添加自定义验证来轻松覆盖验证。而且你从未指定过要保持用户名不变。 – Tom 2010-03-17 17:16:30

如果我正确理解你的问题,你想允许用电子邮件登录。

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

我会回答这个以防其他人读这个问题寻求帮助。

正如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” 变量被定义如上的几行,但从未使用)