Kohana Auth обратные вызовы для входа - PullRequest
0 голосов
/ 05 декабря 2010

У меня есть Kohana Auth и работает прекрасно, за исключением одной мелочи. Используя Model_User, который расширяет Model_Auth_User, существуют обратные вызовы, которые используются для электронной почты, недоступной и имени пользователя, недоступной При входе в систему с правильным именем пользователя и неправильным паролем я получаю сообщение об ошибке «Имя пользователя недоступно», что очевидно, поскольку пользователь пытается войти в систему. Я предполагаю, что мог бы использовать JS, чтобы обойти это, так как я использую JSON для своих сообщений об ошибках. Есть идеи?

Моя настоящая ошибка другая: login.username.invalid. Когда мой логин действителен. Мой контроллер входа в систему:

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

}

1 Ответ

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

это ошибка в классе Model_Auth_User по умолчанию, я говорю об этой части:

 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         } 

Посмотрите на строку 101, там источник ваших проблем. Если вход в систему с правильным именем пользователя и неправильным паролем не удается, возникает ошибка неправильного имя пользователя . Вы можете легко перегрузить этот метод, написав свою собственную функцию входа в систему в вашей модели пользователя. Более того, вам не нужно писать весь класс, просто расширьте стандартный Model_User и определите один метод login () внутри.

...