Не авторизован после ручного входа в CakePHP, если перенаправлен, авторизован, если нет перенаправления - PullRequest
0 голосов
/ 21 сентября 2010

Я использую Janrain Engage для входа на мой сайт CakePHP, и при обработке пользовательских данных я хочу автоматически входить в систему с помощью функции $ this-> Auth-> login () -.

Мне удается нормально войти в систему, если я не перенаправляю после вызова, но если я перенаправляю, я не вошел в систему. Кто-нибудь теперь почему или что я могу сделать, чтобы это исправить?

    function janrain(){
    $rpxApiKey = 'kassdkfkafkkadskfkkdfkksdk';  

    if(isset($_POST['token'])) { 

      /* STEP 1: Extract token POST parameter */
      $token = $_POST['token'];

      /* STEP 2: Use the token to make the auth_info API call */
      $post_data = array('token' => $_POST['token'],
                         'apiKey' => $rpxApiKey,
                         'format' => 'json'); 

      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_URL, 'https://rpxnow.com/api/v2/auth_info');
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
      curl_setopt($curl, CURLOPT_HEADER, false);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      $raw_json = curl_exec($curl);
      curl_close($curl);


      /* STEP 3: Parse the JSON auth_info response */
      $auth_info = json_decode($raw_json, true);

      if ($auth_info['stat'] == 'ok') {

        /* STEP 3 Continued: Extract the 'identifier' from the response */
        $profile = $auth_info['profile'];
        $identifier = $profile['identifier'];

        if (isset($profile['photo']))  {
          $photo_url = $profile['photo'];
        }

        if (isset($profile['displayName']))  {
          $name = $profile['displayName'];
        }

        if (isset($profile['email']))  {
          $email = $profile['email'];
        }

        $user = $this->User->findByUsername($identifier);

        if($user){

            $this->Auth->login($user['User']);
            if ($this->Session->read('Auth.User')) {
                    $this->Session->setFlash('You are logged in!');
                    $this->redirect('/', null, false);
                }
        }
        else{
          $this->User->create();
          $this->User->set('username',$identifier);
          $this->User->set('displayname',$name);
          if(isset($photo_url)){

            $this->User->set('photo_url', $photo_url);
          }
          $this->User->set('password', $this->Auth->password($identifier));
          $this->User->save();
          //$this->User->set('password', $identifier);
          $this->Auth->login($this->User);          
        }

Ответы [ 3 ]

1 голос
/ 08 ноября 2012

Я столкнулся с той же проблемой. Однако я не мог решить эту проблему. Попробуйте переопределить beforeFilter для PagesController (если вы его используете) и добавить в него parent :: beforeFilter.

public function beforeFilter() {
    parent::beforeFilter();
}

Однако это не решило мою проблему. В конце концов я бросил пытаться. Установил OPAuth, натолкнулся на несколько проблем, однако решил их. Facebook, Twitter, Google и т. Д. Теперь отлично работают и интегрированы со встроенной системой авторизации моего сайта.

Ссылки: Сайт OPAuth , Загрузка OPAuth , Плагин OPAuth CakePHP

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

Мне очень не нравится компонент Auth для CakePHP. У меня была точно такая же проблема с CakePHP 1.2, но мне удалось заставить все работать, изменив мой уровень безопасности на «низкий» в файле core.php.

Configure::write('Security.level', 'low');
0 голосов
/ 27 апреля 2011

У меня точно такая же проблема. Пользователь не подтвержден, если я перенаправлю.

Единственное решение, которое я нашел до сих пор, - это перенаправление с использованием JavaScript после проверки пользователя. Я передаю URL для перенаправления в качестве параметра URL-адресу токена, определенному во встроенном виджете:

$url = urlencode($baseUrl.'users/rpx?redirect=' . 'lala');</p> <pre><code><iframe src="http://lolo.rpxnow.com/openid/embed?token_url=<?php echo $url; ?>" scrolling="no" frameBorder="no" allowtransparency="true" style="width:350px;height:216px"></iframe>

...