0

現在、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); にあるようです。データベースでユーザーを見つけますが、Googleアカウントを介してそれらを承認しません。

4

1 に答える 1

1

このリモート データで何をする必要があるかは明らかです。

  1. まだ存在しない場合はDBに保存し、人工的なパスワードを生成します。たとえば、IDと秘密のソルトを使用します
  2. $this->Auth->login($data); を使用して、このデータでユーザーをログインさせます。

既存のユーザーがリモート アカウントをローカル アカウントに関連付けられるようにする場合は、そのためのロジックとワークフローを実装する必要があります。opauth データをセッションに保存し、登録/ログイン フォームにリダイレクトして、ユーザーにユーザー名とパスワードを入力させ、 を使用してリモート アカウントをこのユーザーに関連付けます。

于 2013-08-11T11:30:56.353 に答える