如何:CakePHP登录没有密码?

Peh*_*elu 2 passwords cakephp login phpbb3

我正试图找到一种无需密码登录用户的方法.

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

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

这样我就可以通过论坛中的状态将用户放到他们自己的ACL组中.

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

我也看了http://bakery.cakephp.org/articles/wilsonsheldon/2009/01/13/phpbb3-api-bridge,但它看起来并不像我在寻找...

小智 7

据我所知,Auth需要两条信息才能登录.您可以更改auth with检查users表中的哪些字段.

$Auth->fields = array(
    'username' => 'username',
    'password' => 'password'
);
Run Code Online (Sandbox Code Playgroud)

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

$Auth->fields = array(
    'username' => 'nickname',
    'password' => 'shoesize'
);
Run Code Online (Sandbox Code Playgroud)

重要信息:
AuthComponent要求对存储在数据库中的密码值进行哈希处理,而不是以纯文本格式存储.
(我认为它是密码和Security.salt的sha1)

在上面的示例中,如果数据库中已存在任何条目,则必须使用散列版本的鞋跟形式覆盖每个条目的shoesize字段.

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


快速而肮脏

如果填写users表中的密码字段,返回值为: $Auth->password(null);

然后你可以使用以下内容:

$Auth->login(
    array(
        'User'=>array(
            'username'=> USERNAME_FROM_PHPBB3,
            'password'=>null
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

减少快速和肮脏


创建新用户时.将密码字段设置为某个随机输入的md5哈希值.

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

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

$this->authUser = $this->User->findByUsername( USERNAME_FROM_PHPBB3 );
Run Code Online (Sandbox Code Playgroud)

如果查询成功,请登录用户

if($this->authUser){
    if($Auth->login($this->authUser)){
        // Login Successful
    }
}
Run Code Online (Sandbox Code Playgroud)