2

我正在尝试找到一种无需密码即可登录用户的方法。

原因是我的站点中有 phpBB3 论坛,并且用户已经在那里登录。因此,我现在正在对站点进行扩展,使其不仅仅是论坛(使用 CakePHP)。我认为当用户创建论坛帐户时,我可以将自动帐户创建附加到 CakePHP(当然还有现有用户的其他链接)。因此,用户将获得与他们在论坛中注册的用户名相同的 CakePHP 帐户。这意味着注册到网站的 CakePHP 部分的唯一方法是先注册到论坛。

现在我想通过 phpBB3 登录来处理整个日志记录,这样用户仍然可以登录到论坛,然后我会附上一段代码,该代码也可以使用他们用来登录的用户名登录到网站的 CakePHP 部分到论坛。

通过这种方式,我还可以根据用户在论坛中的状态将用户添加到他们自己的 ACL 组中。

这就是我所追求的,我需要知道以这种方式登录用户的方式。我不是在寻找完整的代码我只是在寻找一个答案,它解释了我如何在没有密码的情况下在 CakePHP 中登录用户。

我也看过http://bakery.cakephp.org/articles/wilsonsheldon/2009/01/13/phpbb3-api-bridge但它看起来不太像我在找什么......

4

3 回答 3

7

据我记得,身份验证需要两条信息才能登录。您可以更改用户表中的哪些字段由 auth 检查。

$Auth->fields = array(
    'username' => 'username',
    'password' => 'password'
);

因此,如果您希望能够根据用户的昵称和鞋码登录用户:

$Auth->fields = array(
    'username' => 'nickname',
    'password' => 'shoesize'
);

重要提示:
AuthComponent 期望存储在数据库中的密码值被散列而不是以明文形式存储。
(我认为这是密码和Security.salt的sha1)

在上面的示例中,如果数据库中已经存在任何条目,则您必须用 hashed 版本的 shoesize 覆盖每个条目的 shoesize 字段。

要自己生成哈希密码,您可以使用$Auth->password('A Password');


又快又脏

如果您使用以下返回值填写用户表中的密码字段: $Auth->password(null);

然后,您可以使用以下内容:

$Auth->login(
    array(
        'User'=>array(
            'username'=> USERNAME_FROM_PHPBB3,
            'password'=>null
        )
    )
);

不那么快速和肮脏


创建新用户时。将密码字段设置为一些随机输入的 md5 哈希。

$this->authUser[$this->User->alias][$Auth->fields['password']] = $Auth->password(md5(rand().rand()));

使用 phpBB3 中的用户名从数据库中的用户表中检索相关记录。

$this->authUser = $this->User->findByUsername( USERNAME_FROM_PHPBB3 );

如果查询成功 登录用户

if($this->authUser){
    if($Auth->login($this->authUser)){
        // Login Successful
    }
}

于 2011-04-03T22:22:35.160 回答
0

从您的 cakephp 应用程序中,您可以检查用户是否存在于 phpbb 论坛表中,并且您可以使用 phpbb 会话检查用户是否已登录。

于 2011-04-03T19:43:31.180 回答
0

此功能将解决您的问题:

public function forceLogin($userName = NULL) {
    $this->_setDefaults();

    $this->User = ClassRegistry::init('User');
    $this->User->recursive = 0;
    $user = $this->User->findByUsername($userName);

    if (!empty($user['User'])) {
        $this->Session->renew();
        $user['User']['id'] = null;
        $user['User']['password'] = null;
        $this->Session->write(self::$sessionKey, $user['User']);
    }

    return $this->loggedIn();
}
于 2013-06-20T12:38:14.307 回答