【问题标题】:cakephp authentication by user idcakephp 通过用户 ID 进行身份验证
【发布时间】:2012-11-23 15:52:29
【问题描述】:

是否可以在 CakePHP 1.3 中通过在 users 表中指示用户的 id 来登录用户?

现在,要进行“手动”登录,我这样做(可行):

$this->data['User']['username'] = username;
$this->data['User']['password'] = password;
$this->Auth->login($this->data);

我希望能够指明特定用户,例如在 login() 函数之前添加 $this->data['User']['user_id']。 (我试过了,但是不行)。

我之所以要这样做是因为在 users 表中有不同的用户记录,这些用户具有相同的 usernamepassword >。这看起来很奇怪,但在我的情况下是有道理的,因为同一个用户可能会出于不同的原因创建多个帐户,并且他可能会选择相同的用户名/密码。

任何想法将不胜感激!

编辑:

我将给出一个具体的例子来说明我正在尝试做的事情,也许它有助于带来一些想法。

假设我在 users 表中有这 2 条记录(字段是 user_id / username / password / account_id):

  • 记录 1:1 / johndoe / password1 / 10
  • 记录 2: 2 / johndoe / password1 / 15

所以这两条记录有相同的用户名和密码,但不同的 user_id 和 account_id。处理登录时,我知道用户选择了哪个 account_id。所以我想登录相应的用户。因此,如果用户选择帐户 15,那么日志就是,我应该使用 id 2 登录用户。

但是,cake 的登录方式是始终检索与用户名/密码匹配的第一条记录。在此示例中,cake 将使用 id 1 登录用户。

有什么方法可以做我想做的事吗?

【问题讨论】:

    标签: cakephp authentication


    【解决方案1】:

    对我来说这听起来不是一个好主意,但如果你真的想要/必须这样做,那么看看AuthComponent::userScope。您可以使用它来定义身份验证查找的附加条件,例如:

    $this->Auth->userScope = array('User.account_id' => 15);
    

    只有当用户名和密码匹配并且用户 account_id15 时,身份验证才会成功,即生成的查询看起来像这样

    User.username = 'abc' AND User.password = 'xyz' AND User.account_id = 15
    

    【讨论】:

    • 感谢您的回复。问题是我不确定这是我需要的,因为一旦找到与用户名/密码匹配的记录,它就允许包含条件。但是,我需要一些允许我通过 user_id 选择记录的东西。我看到我可能需要一个自定义登录功能。我将更新我的问题以更详细地解释我正在尝试做的事情
    • 这听起来仍然像您正在寻找的。 userScope 中定义的条件正在用于检查用户名和密码的同一查询中,这意味着您只会检索account_id = 15 所在的用户(我在示例中更改了列名)。因此,通过定义这样的条件,您将有效地选择特定用户(假设 account_id/username 组合是唯一的)。
    • 好的,谢谢!只是为了确定,我应该在哪里放置$this->Auth->userScope = array('User.account_id' => $current_account_id); 行?是否需要在 beforeFilter() 中?或者我可以在调用 login() 操作之前从不同的操作调用它吗?
    • 你可以把它放在任何你想要的地方,只要它在你调用AuthComponent::login()之前被调用。
    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 2016-04-16
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多