除了一件小事之外,我已经让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);
}
}
}
}
答案 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()方法。