CakePHP / Facebook Plugin - кнопка выхода из системы, ссылающаяся на # - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь использовать плагин Facebook с CakePHP - все кажется, что все идет хорошо - я могу использовать кнопки «Мне нравится / рекомендовать» - я могу войти через Facebook - он запрашивает разрешение для вещей, которые я сказал ему .. .etc

Проблема в том, что моя кнопка ВЫХОДА просто ссылается на страницу, на которой вы находитесь, плюс #

Итак - если я нахожусь на index.php, кнопка выхода ссылается на index.php #

Я включаю правильный HTML-тег Facebook и init () в правильных местах.

Есть мысли?

Вот мой код для кнопки выхода из системы:

if(!$session->check('Auth.User.id') && !$this->Connect->user('id')) {
    echo $this->Html->link('LOGIN', array('controller' => 'users', 'action' => 'login'));
} else {     
    echo $facebook->logout(array('redirect' => array('controller'=>'users', 'action'=>'logout'), 'label' => 'LOGOUT'));
}

EDIT

И чтобы быть ясным - мне было бы все равно, если ссылка #, но кнопка выхода из системы ничего не делает, кроме как поднять браузер вверх. Он не выходит из системы, он не обновляет страницу.


EDIT2

Если я запускаю новый браузер, захожу в Facebook, затем захожу на мой сайт, он автоматически входит в систему - в этот момент кнопка выхода из системы работает отлично. Но - если я вхожу через логин пользователя на моем сайте (вместо FB), кнопка выхода просто выскакивает в верхнюю часть страницы (т. Е. - пустая якорная ссылка)

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

В настоящее время я дублирую ту же проблему (плюс еще 1), и я обнаружил, что FacebookHelper.php, похоже, неправильно обрабатывает параметры $:

if((isset($options['redirect']) && $options['redirect']) || $options['custom']){
            $options['redirect'] = Router::url($options['redirect']);
            $onclick = "logout('".$options['redirect']."');";
            if(isset($options['confirm'])){
                $onclick = 'if(confirm("'.$options['confirm'].'")){'.$onclick.'}';
            }
            if($options['img']){
                $source = '/Facebook/img/'.$options['img'];
                return $this->Html->image($source, array(
                'alt' => $options['alt'],
                'id' => $options['id'],
                'url' => '#',
                'onclick' => $onclick));
            }
            else {   /* HERE  */
                return $this->Html->link($options['label'], '#', array(
                    'onclick' => $onclick, 'id' => $options['id']));
            }
        } else {
            $source = '/Facebook/img/facebook-logout.png';
            return $this->Html->image($source, array(
                'alt' => 'Facebook logout',
                'url' => '#',
                'id' => $options['id'],
                'onclick' => 'logout();'));

Я не очень хорошо разбираюсь в PHP и могу ошибаться, но, похоже, если заполнить опции $, например перенаправить, но не IMG Param, то на экране не появляется кнопка (она идет «ЗДЕСЬ»). Изменяя код выше, я могу получить ссылку на личную книгу, и выход из FB работает. Теперь я отлаживаю проверку подлинности, в которой сеансы продолжают восстанавливаться после выхода из системы (без подключения к FB).

Мой «фиксированный код», все еще WIP и уродлив:

if((isset($options['redirect']) && $options['redirect']) || $options['custom']){
                    debug($options);
        $onclick = "logout('".$options['redirect']."');";
        if(isset($options['confirm'])){
            $onclick = 'if(confirm("'.$options['confirm'].'")){'.$onclick.'}';
        }
        if($options['img']){
            $source = '/Facebook/img/'.$options['img'];
            return $this->Html->image($source, array(
            'alt' => $options['alt'],
            'id' => $options['id'],
            'url' => '#',
            'onclick' => $onclick));
        }
        else {
                        //Yes it gets here!
                        $source = '/Facebook/img/facebook-logout.png';
                        $redirect=$options['redirect'];
                        return $this->Html->image($source, array(
            'alt' => 'Facebook logout',
            //'url' => '#',
                            'url' => $redirect,
            'id' => $options['id'],
            'onclick' => "logout('$redirect');"));
        }
    } else {
        $source = '/Facebook/img/facebook-logout.png';
        return $this->Html->image($source, array(
            'alt' => 'Facebook logout',
            'url' => '#',
            'id' => $options['id'],
            'onclick' => 'logout();'));
    }
}

`

0 голосов
/ 14 апреля 2011

Ссылка должна быть сгенерирована как "#". Функция выхода генерирует эту ссылку с помощью события javascript onclick, которое вызывает FB и выходит из системы. Я бы проверил, если вы получаете ошибки JavaScript. Вы ссылаетесь на исходный код для подтверждения .

...