CakePHP Auth 登录(错误的方法?)
Posted
技术标签:
【中文标题】CakePHP Auth 登录(错误的方法?)【英文标题】:CakePHP Auth Login (Wrong Approach?) 【发布时间】:2014-01-15 00:22:31 【问题描述】:我正在使用 Cakephp 2.4.4、facebook_php_sdk 并尝试构建我自己的函数来通过 facebook /linkedin 登录创建用户。
据我了解,facebook 不会检索密码,因此我创建了一个带空格的密码,并在保存之前对其进行哈希处理。我这样做的原因是因为“Auth Login”需要用户名(我把它作为电子邮件输入)和密码(我对提供的 CakePHP Auth 不太清楚,这里可能是这样做的错误方法)。
我现在面临的问题是,如果用户通过“abc@gmail.com”手动创建并输入简单的密码。稍后,如果此用户通过使用同一电子邮件“abc@gmail.com”创建的 facebook 登录,他/她将无法登录,因为数据库中已经有此电子邮件。
我很确定那里出了点问题,但不知道从哪里开始,任何指导和指点将不胜感激。
这是我通过 facebook 登录的方式:-
$user_profile = $facebook->api('/me','GET');
$this->request->data['User']['username'] = $user_profile['email'];
$this->request->data['User']['password'] = ' ';
$this->Auth->login()
通过 facebook 创建的用户:-
$data = array(
'name' => $user_profile['name'],
'username' => $user_profile['email'],
'email' => $user_profile['email'],
'password' => ' ',
'create_source' => 1 //Used this to differentiate from fb or linkedin
);
$this->User->save($data);
感谢 XuDing 回答我应该这样做:-
$this->Auth->login($user)
还有一个场景: 如果用户想要在最初由 Facebook 登录创建帐户的地方进行手动登录怎么办?
【问题讨论】:
我不熟悉 facebook 或 linkedIn API,但我认为除非有与 API 相关的原因来区分帐户最初是由哪一个创建的,否则您不应该费心去区分他们,并允许用户从任一帐户登录该电子邮件地址。 谢谢凯,我已经通过徐鼎的建议做到了,我还有另一个场景,我在帖子底部进行了更新。 【参考方案1】:如果用户名(电子邮件)已经存在,您可以使用 Facebook ID 找到它并直接使用 $this->Auth->login($user) 登录。查看此插件代码,它包含使用 Facebook 登录的完整逻辑:
function __syncFacebookUser
https://github.com/webtechnick/CakePHP-Facebook-Plugin/blob/master/Controller/Component/ConnectComponent.php#LC129
【讨论】:
不错的@XuDing,我差点忘了这对我有很大帮助$this->Auth->login($user)。我还有一个问题,如果用户想要手动登录但帐户最初是由 facebook API 创建的? 在这种情况下,您可以允许他们通过设置页面更新密码。更新后就可以正常登录了。以上是关于CakePHP Auth 登录(错误的方法?)的主要内容,如果未能解决你的问题,请参考以下文章
cakephp : 使用 $validate 数组验证登录表单