扩展CakeDC用户插件,以便与Opauth或OpenID一起使用


Extending CakeDC users plugin for use with Opauth or OpenID

我目前正在尝试扩展cakeDC用户插件。事实证明,将此插件与位于此处的Opauth插件集成起来相对困难:

https://github.com/uzyn/cakephp-opauth

例如,我希望在我的应用程序中能够通过facebook、谷歌等注册和登录用户

我一直在谷歌实现中尝试这样做,我能够通过opauth插件从谷歌检索数据。我的问题在于我现在该如何处理这些信息?如果我想用我的应用程序注册这个用户,我不知道接下来该怎么做。。。

数组中返回的数据如下所示:

Array
(
    [auth] => Array
        (
            [uid] => 1xxxxxxxxx1
            [info] => Array
                (
                    [name] => xxx xxx
                    [email] => xx.xx@xx.com
                    [first_name] => xx
                    [last_name] => xx
                )
            [credentials] => Array
                (
                    [token] => #%*(&)(*&%)*^$^)($%
                    [expires] => 2013-08-09T19:23:10+00:00
                )
            [raw] => Array
                (
                    [id] => 1XXXXXXXXXXXXX1
                    [email] => XXXX.XXXXX@XXXXX.com
                    [verified_email] => 1
                    [name] => XXX XXX
                    [given_name] => XXXX
                    [family_name] => XXXXX
                    [gender] => male
                    [locale] => en
                    [hd] => test.com
                )
            [provider] => Google
        )
    [timestamp] => 2013-08-09T18:23:11+00:00
    [signature] => *#&$&$$&$&$&$&$$####
    [validated] => 1
)

在我看来,没有一个密码令牌可以保持生成状态进行比较,但它甚至不是当前的拦截器。拦截器驻留在如何将这些信息注册到cakeDC用户插件扩展类中。我们非常感谢您的帮助,我相信我不是唯一一个好奇如何扩展这个插件以与Opauth插件集成的开发人员。

编辑:(**工作登录代码**)

        public function beforeFilter() {
    $this->Auth->Allow('opauth_complete');
}
public function opauth_complete() {
    $user = $this->set('opauth_data', $this->request->data);
    $loginUser = $this->User->find('first', 
        array('fields'=>array('User.*'), 
            'conditions'=>array('User.email'=>$this->request->data['auth']['info']['email'])));
    if ($this->request->is('post')) {
        if ($this->Auth->login($loginUser)) {
           //return $this->redirect($this->Auth->redirect());
           $this->Session->setFlash(__('You are logged in.'));
        }else{
            $this->Session->setFlash(__('You are currently not Authorized'));
        }
    }
}

挂断似乎在$this->Auth->login($loginUser)上;它在数据库中找到用户,但它仍然不会通过谷歌帐户授权他们。

很清楚需要对这个远程数据做什么:

  1. 如果它还不存在,请将其保存到数据库中,生成一些人工密码,例如,只需使用id和一些秘密salt
  2. 使用$this->Auth->login($data)将具有此数据的用户登录

如果您想允许现有用户将远程帐户与本地帐户关联,则必须实现其逻辑和工作流。将opauth数据保存到会话,重定向到注册/登录表单,让用户输入用户名和密码,然后使用将远程帐户与该用户关联。