2016-11-16 4 views
-1

J'ai fait une connexion simple dans Cakephp en utilisant authcomponent, ça marche vraiment bien, comment puis-je me connecter en utilisant ajax?Comment faire AJAX login dans Cakephp 2.8.0?

J'ai utiliser le code pour la connexion simple qui sont donnés ci-dessous:

if ($this->request->is('post')) 
{ 
    if ($this->Auth->login()) 
    { 
     if ($this->Auth->user('role') === 'admin') 
     { 

      $this->redirect(array('admin' => false,'controller' => 'users','action' => 'index')); 

     } 
    } 
}   
+0

Je suppose que vous auriez besoin de JavaScript pour envoyer des informations d'identification et une réponse JSON dire si elle a réussi ou non. Vous pouvez le faire avec JavaScript brut ou utiliser une bibliothèque comme jQuery. Vous pouvez ensuite utiliser un contrôleur pour donner les bonnes réponses. – halfer

+0

monsieur, j'ai utilisé $ .ajax méthode jquery mais le problème est que comment peut-il comparer – Raju1990

+0

OK, s'il vous plaît ajouter votre code JS. Je suppose que vous envoyez un nom d'utilisateur, mot de passe et le rôle de votre JavaScript. Vous aurez probablement besoin d'un autre contrôleur pour cela - utilisez la logique PHP ci-dessus et renvoyez une réponse JSON avec un succès booléen et des chaînes d'erreur si nécessaire. – halfer

Répondre

0

Votre code ajax devrait ressembler à ceci:

$(document).on('submit','#yourFormId',function(event){ 
    event.preventDefault(); 
    var data = $(this).serialize(); 
    var url = 'url_for_your_login_method'; /* like 'localhost/your_project_name/Users/login' */ 
    $.ajax({ 
    url:url, 
    type:'post', 
    data:data, 
    dataType:'json', 
    success:function(response) { 
     if(response == 1) { 
     // login success 
     } else { 
     // login fails 
     } 
    } 
    }); 
}); 

Et dans votre méthode de connexion devrait ressembler à ceci:

if ($this->request->is('post')) 
{ 
if ($this->Auth->login()) 
    { 
    if ($this->Auth->user('role') === 'admin') 
     { 
     $output = 1; // login success and role is admin 
     } else { 
     $output = 0; // login success but role is not admin 
     } 
    } else { 
     $output = 2; // login fails 
    } 
    $this->set(array(
     'output'=>$output, 
     '_serialize'=>'output' 
    )); 
} 

Pour le hachage de mot de passe Blowfish, Dans votre AppController:

<?php 
class AppController { 

    public $components = array(
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'passwordHasher' => 'Blowfish' 
      ) 
     ) 
     ) 
    ); 
    } 
    ?> 

Et AppModel:

<?php 
    App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); 


    class User extends AppModel { 

     public function beforeSave($options = array()) { 
     // if ID is not set, we're inserting a new user as opposed to updating 
      $passwordHasher = new BlowfishPasswordHasher(); 
      $this->data[$this->alias]['password'] = $passwordHasher->hash($this->data[$this->alias]['password']); 
     return true; 
    } 
} 
+0

Bonjour HOW peut convertir le mot de passe en blowfish, parce que nous avons utiliser la méthode ajax, donc cakephp pas automatiquement le convertir oon blowfish, s'il vous plaît me suggérer .... – Raju1990

+0

voir la réponse éditée pour blowfish hashing .. –

+0

hachage ne fonctionne pas dans le cas de l'appel ajax – Raju1990