我的组件与Auth组件冲突

时间:2013-04-14 01:27:11

标签: php cakephp facebook-php-sdk cakephp-1.2

我决定将Facebook功能处理成一个组件,我编写了以下代码来启动我自己的Facebook组件:

<?php
class FacebookComponent extends Object{
  var $name = 'Facebook';
 // var $components = array('Auth', 'Session');
  var $settings = array();
  var $controller = null;
  var $facebook;
  var $fbUid;

  function initialize(&$controller, $settings) {
    Configure::load('app.conf');
    App::import('Vendor', 'Facebook', array('file' => 'facebook/src/facebook.php'));
    $this->facebook = new Facebook(array(
        'appId' => Configure::read('FBappId'),
        'secret' => Configure::read('FBsecret')
    ));

    $this->fbUid = $this->facebook->getUser();  
  }

  function is_user(){
    if ($this->fbUid){
      return true;
    }
    else{
      return false;
    }   
  }
  function getLoginUrl(){
      return $this->facebook->getLoginUrl(array( 'scope' => 'publish_stream'));
    }

}

?>

关于auth组件和用户控制器的登录操作的一切工作正常,而不使用users_controller.php中的上述组件。但是,只需通过var $ components在users_controller.php的组件列表中添加我的Facebook组件,我发现登录操作的行为方式很奇怪:

function login(){       
      if (!$this->Auth->user()){
        if (empty($this->data['User']['username'])){         
          $this->Session->setFlash(__('You have to login', true), 'error_msg');
        }
        else{
          $this->Session->setFlash(__('bad login', true), 'error_msg');

        }

      }
      else{
        $this->Session->setFlash(__('correct login', true), 'done_msg');
      }
}

当我尝试通过Auth组件访问任何控制器的任何受保护的操作时,我得到登录页面,其中包含正确登录的消息,再次重新登录后,它会重定向到网站的主页。

还有另一个症状,我有导航元素,如果用户登录则显示注销链接,除了登录页面之外,它不会在网站的任何部分显示此链接

<?php if ($session->read('Auth.User.id')): ?>
    <li><?php echo $html->link($html->image('close.png') . __('logout', true), array('controller' => 'users', 'action' => 'logout', 'admin' => false), array(), null, false); ?></li>
  <?php endif; ?>

我正在使用CakePHP 1.2.10和Facebook PHP SDK(v.3.0.0) - 来自供应商 - 。我想确认没有组件的每件事都可以。有什么问题?

0 个答案:

没有答案