Kohana Auth回调登录

时间:2010-12-05 16:50:36

标签: kohana authentication

除了一件小事之外,我已经让Kohana Auth起来并且跑得很可爱。 使用扩展Model_Auth_User的Model_User,有回调用于电子邮件不可用和用户名不可用。使用正确的用户名和错误的密码登录时,我收到一个用户名不可用的错误,这很明显,因为用户正在尝试登录。有什么方法吗?因为我使用JSON作为我的错误消息,所以我可以使用JS来解决这个问题。有什么想法吗?

我的实际错误不同: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 :(得分:0)

这是默认的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()方法。