CakePHP Auth:如何通过同一帐户上有多封电子邮件的电子邮件进行身份验证?

时间:2012-10-11 11:44:19

标签: email cakephp authentication

我从CakePHP开始。我使用email而不是username构建了一个用户表记录... 问题是我不想拥有,而不是一个,但每个用户都有很多电子邮件,这样他们就可以使用他们的任何电子邮件登录同一个帐户,就像facebook一样。

我的问题,一旦CakePHP不允许我动态创建多个属性(参见my previous question),最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

我的建议是在数据库中设置两个表:

  • USERS
  • USER_EMAILS

在您的USERS表中,您可以存储有关用户的任何内容:

  • ID
  • 用户名
  • FNAME
  • L-NAME
  • 电话
  • 等...

然后设置USER_EMAILS表以使用外键引用USERS表:

  • user_id(外键)
  • 电子邮件

使“电子邮件”成为一个独特的索引,以防止重复。

现在,只要您在USER_EMAILS表中查找电子邮件地址(例如登录时),您就会获得对您应该使用的USER的引用。

这有意义吗?

答案 1 :(得分:1)

您可能需要做@Petar回答的内容...以便为每个用户存储多封电子邮件。

要对用户进行身份验证,您需要创建一个custom authentication object,您必须创建一个authenticate()方法来生成查询,如果电子邮件密码正确,则返回true。

不要忘记在AppController中设置这个新的身份验证对象。它应该是这样的:

<强> AppController.php

// Pass settings in $components array
public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'MultipleEmails'
        )
    )
);

<强>组件/认证/ MultipleEmailsAuthenticate.php

class MultipleEmailsAuthenticate extends BaseAuthenticate {
    public function authenticate(CakeRequest $request, CakeResponse $response) {
        //make your query here and return true or false     
    }

如果您需要有关如何编写BaseAuthenticate类的示例,可以阅读源文件:BaseAuthenticateFormAuthenticate

希望这有帮助