【问题标题】:Extending CakeDC users plugin for use with Opauth or OpenID扩展 CakeDC 用户插件以与 Opauth 或 OpenID 一起使用
【发布时间】:2013-08-09 18:27:04
【问题描述】:

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

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

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

我一直在尝试使用 google 实现,并且能够通过 opauth 插件从 Google 检索数据。我的问题在于我现在如何处理这些信息?如果我想用我的应用程序注册这个用户,我不知道接下来要执行的步骤...

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

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);它在数据库中找到用户,但它仍然不会通过谷歌帐户授权他们。

【问题讨论】:

    标签: php cakephp oauth openid cakedc


    【解决方案1】:

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

    1. 如果它不存在,则将其保存到您的数据库中,生成一些人工密码,例如使用 id 和一些秘密盐
    2. 使用 $this->Auth->login($data); 使用此数据记录用户;

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

    【讨论】:

    • 我看了一遍又一遍,似乎少了一个步骤,可能还少了一个步骤。我已经编辑了我最初的问题,您将看到我授权注册用户的非常基本的尝试
    • 原来这一直是关键:public function beforeFilter() { $this->Auth->Allow('opauth_complete'); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2018-03-14
    • 2019-02-01
    相关资源
    最近更新 更多