2010-12-05 46 views
0

J'ai l'OK Kohana Auth en cours d'exécution, sauf pour une chose mineure. En utilisant Model_User qui étend Model_Auth_User, il y a des rappels qui sont utilisés pour l'email non disponible et un nom d'utilisateur non disponible. Lorsque vous vous connectez avec un nom d'utilisateur correct et un mot de passe erroné, j'obtiens un nom d'utilisateur non disponible, ce qui est évident parce que l'utilisateur essaie de se connecter. Je pense que je pourrais utiliser JS pour contourner ce problème puisque j'utilise JSON pour mes messages d'erreur. Une idée?Kohana Auth callbacks pour la connexion

Mon erreur réelle est différente: login.username.invalid. Quand mon nom d'utilisateur est valide Mon contrôleur de connexion:

class Controller_Login extends Controller_Main { 

public function action_index(){ 

    if ($_POST) 
    { 
     #Instantiate a new user 
     $user = ORM::factory('user'); 

     #Check Auth 
     $status = $user->login($_POST); 

     #If the post data validates using the rules setup in the user model 
     if ($status) 
     {  
      #redirect to the user account 
      $json = array('redirect'=>'home'); 
      $this->request->headers['Content-Type'] = 'application/json'; 
      $this->request->response = json_encode($json); 


     }else 
     { 
          #Get errors for display in view 
          //encode errors here 
     $errors = $_POST->errors('login'); 
     $this->request->headers['Content-Type'] = 'application/json'; 
     $this->request->response = json_encode($errors); 
     } 
    } 
} 

}

+0

montrez votre code s'il vous plaît – biakaveron

Répondre

0

il est un bug dans la classe par défaut Model_Auth_User, je parle de cette partie:

83   if ($array->check()) 
84   {     
85    // Attempt to load the user  
86    $this->where($fieldname, '=', $array['username'])->find(); 
87 
88    if ($this->loaded() AND Auth::instance()->login($this, $array['password'], $remember)) 
89    { 
90     if (is_string($redirect))  
91     {   
92      // Redirect after a successful login 
93      Request::instance()->redirect($redirect); 
94     }   
95 
96     // Login is successful   
97     $status = TRUE; 
98    }    
99    else   
100    { 
101     $array->error('username', 'invalid'); 
102    }    
103   } 

Regardez à la ligne 101, il est source de votre problèmes. Si la connexion avec le nom d'utilisateur correct et le mauvais mot de passe échoue, erreur de mauvais nom d'utilisateur soulève. Vous pouvez facilement surcharger cette méthode, en écrivant votre propre fonction de connexion dans votre modèle d'utilisateur. De plus, vous n'avez pas besoin d'écrire toute la classe, il suffit d'étendre le Model_User par défaut et de définir une seule méthode de login() à l'intérieur.