2010-09-21 136 views
0

我正在使用Janrain参与登录到我的CakePHP站点,并且在处理用户数据时,我想使用$ this-> Auth->登录() - 功能。在CakePHP中手动登录后未登录如果重定向,如果没有重定向登录

我设法登录罚款,如果我没有重定向后的通话,但如果我重定向,我没有登录。现在有人为什么或我可以做什么来straigten这个?

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);   
     } 
+0

你使用:http://code.42dh.com/openid/? (基于JanRain) – 2012-11-17 08:40:55

+0

我不记得了,我也没有收到消息。 – andersem 2012-11-19 09:06:10

回答

0

我有完全一样的麻烦。如果我重定向,用户不会被验证。

我至今发现的唯一解决方案是在验证用户之后使用JavaScript进行重定向。我将URL传递作为参数在嵌入的小部件定义的令牌网址重定向:

$url = urlencode($baseUrl.'users/rpx?redirect=' . 'lala');

<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> 

0

我真的不喜欢的的CakePHP的验证组件。我遇到了与CakePHP 1.2完全相同的问题,但通过在core.php文件中将我的安全级别更改为“低”来设法使事情正常运行。

Configure::write('Security.level', 'low'); 
1

我来过同一个问题。但是我无法解决这个问题。尝试覆盖PagesController上的beforeFilter(如果您正在使用它)并在其中添加parent :: beforeFilter。

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

但是,这并没有解决我的问题。最终我放弃了尝试。安装了OPAuth,遇到了几个问题,但是解决了它们。 Facebook,Twitter,谷歌等,现在工作正常,并与我的网站的内置身份验证系统集成。

链接:OPAuth WebsiteOPAuth DownloadOPAuth CakePHP Plugin