1

facebook-sdk でユーザーを作成すると、facebook-login 後に自動的にログインしません。ユーザーの作成はうまくいきますが、ログインできません。

Cakephp と facebook-sdk は最新バージョンです。ここに私のアカウントコントローラがあります:

    <?php

class AccountController extends AppController {

    public $uses = array('User');

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('login');
        #$this->Auth->authenticate = array('Basic' => array('fields' =>array('username' => 'fb_id', 'password' => 'random')));

    }

    public function login() {
        $this->facebook = new Facebook(array(
            'appId' => '14549077xxxx',
            'secret' => '95a38f3xxxx',
            'cookie' => 'true'
        ));

        $user = $this->facebook->getUser();
        if($user){
            try{
                $params = array('next' => 'http://'.$_SERVER['HTTP_HOST'].'/account/logout');
                $this->Session->write('logoutLink', $this->facebook->getLogoutUrl($params));

                #if (!$this->Auth->user()) {
                    $fb_user = $this->facebook->api('/me');

                    $authUser = $this->User->findByFbId($user);

                    if (empty($authUser)) {
                        $pw = $this->__randomString();
                        $authUser = array(
                            'fb_id' => $user,
                            'random' => $pw,
                            'password' => $this->Auth->password($pw),
                            'email' => $fb_user['email'] 

                        );
                        $this->User->create();
                        $this->User->save($authUser);
                        $authUser = $this->User->findByFbId($user);
                    }

                    $this->Auth->authenticate = array(
                        'Form' => array(
                                'fields' => array('username' => 'fb_id', 'password' => 'random')
                        )
                    );

                    $this->Auth->login($authUser['User']);

                    $this->redirect($this->Auth->redirect());
                #}
            }catch(FacebookApiException $e){
                $user = NULL;
            }
        }
        if(empty($user)){
            $loginurl = $this->facebook->getLoginUrl(array(
                'scope'=> 'email,publish_stream,read_friendlists',
                'redirect_uri'  => 'http://'.$_SERVER['HTTP_HOST'].'/account/login',
                ));

            $this->redirect($loginurl);
        }
    }

    public function dashboard() {
        echo 'logged in';
    }
}

ユーザーは常にログイン ページにリダイレクトされます。$authUser は常に正しく入力されます。

助けてください:)

はじめましてm.

4

4 に答える 4

1

私のAppController

class AppController extends Controller {

    public $components = array('Auth','Session');

    public function beforeFilter() {
        $this->Auth->loginRedirect = array('controller' => 'account', 'action' => 'dashboard');
        $this->Auth->logoutRedirect = '/';
        $this->Auth->loginAction = array('controller' => 'pages', 'action' => 'login');
    }

セッション:

Configure::write('Session', array(
        'defaults' => 'php'
    ));
于 2013-01-09T09:54:20.947 に答える
1

チャットで解決した問題:

Facebook が新しいセッションを作成しています。

$this->facebook = new Facebook(array(
            'appId' => '14549077xxxx',
            'secret' => '95a38f3xxxx',
            'cookie' => 'true'
        ));

このコードは appcontroller に書き留める必要があります

public function beforeFilter() {
        $this->Auth->loginRedirect = array('controller' => 'account', 'action' => 'dashboard');
        $this->Auth->logoutRedirect = '/';
        $this->Auth->loginAction = array('controller' => 'pages', 'action' => 'login');
        $this->facebook = new Facebook(array(
            'appId' => '14549077xxx',
            'secret' => '95a38f3xxx',
            'cookie' => 'true'
        ));

    }

一緒に試してくれてありがとう@noslone :D

于 2013-01-09T14:21:55.823 に答える
0

その他の問題が発生した場合は、認証コンポーネントの認証オブジェクトとしてFacebookoAuthを使用するプラグインを開発しています。サーバー側のFacebookログインを使用するビルド済みのソリューションが必要な場合は、私のWebサイトを確認してください:http://marianofino.github.com/Facebook-Plugin-for-CakePHP/

于 2013-01-11T21:14:22.357 に答える
0

$this->Auth->login($authUser['User']);ユーザーをログインさせるためのデータを提供することは間違っています。

CakePHP のドキュメントによると:

In 2.0 $this->Auth->login($this->request->data) will log the user in with whatever data is posted, whereas in 1.3 $this->Auth->login($this->data) would try to identify the user first and only log in when successful.

次のようにする必要があります。

$this->request->data['User'] = $authUser['User'];
$this->request->data['User']['password'] = $authUser['User']['random'];

$this->Auth->login();

$this->request->data['User']['password'] = $authUser['User']['random'];ログインに暗号化されたパスワードを提供するときに認証に失敗すると思うので、私も追加しました。

于 2013-01-09T08:16:53.280 に答える