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 用 Auth 记住我

Cakephp auth 和 acl 未登录用户组

使用 CakePHP 'Acl' 组件

cakephp : 使用 $validate 数组验证登录表单

CakePHP 3 Auth注销 - 错误:未找到身份验证适配器“loginAction”

使用 Cakephp-jwt-auth [CakePHP 3] 过期后颁发新令牌