2010-09-21 21 views
0

J'utilise Janrain s'engager pour se connecter à mon site CakePHP, et lors de la manipulation des données de l'utilisateur, je veux me connecter automatiquement en utilisant le $ this-> Auth-> login() - fonction.Non connecté après la connexion manuelle dans CakePHP si redirigé, connecté si aucune redirection

Je parviens à me connecter correctement si je ne redirige pas après l'appel, mais si je redirige, je ne suis pas connecté. Est-ce que quelqu'un maintenant pourquoi ou ce que je peux faire pour straigten cela?

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

Utilisez-vous ceci: http://code.42dh.com/openid/? (basé sur JanRain) –

+0

Je ne me souviens pas et je n'ai pas la source. – andersem

Répondre

0

Je rencontre exactement le même problème. L'utilisateur n'est pas validé si je redirige.

La seule solution que j'ai trouvé jusqu'à maintenant est de rediriger en utilisant JavaScript après avoir validé l'utilisateur. Je passe l'URL pour rediriger comme paramètre à l'URL jeton défini dans le widget intégré:

$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

Je n'aime vraiment le composant Auth pour CakePHP. J'avais exactement le même problème avec CakePHP 1.2, mais j'ai réussi à faire fonctionner les choses en changeant mon niveau de sécurité à 'low' dans le fichier core.php.

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

J'ai rencontré le même problème. Cependant, je ne pouvais pas résoudre ce problème. Essayez de surcharger beforeFilter sur PagesController (si vous l'utilisez) et d'y ajouter parent :: beforeFilter.

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

Cependant, cela n'a pas résolu mon problème non plus. Finalement, j'ai arrêté d'essayer. Installé OPAuth, est venu à travers plusieurs problèmes, cependant les a résolus. Facebook, Twitter, Google, etc, fonctionne maintenant bien et intégré avec le système d'authentification intégré de mon site.

Liens: OPAuth Website, OPAuth Download, OPAuth CakePHP Plugin