我想用CodeIgniter和jQuery進行用戶身份驗證。我已經設法做到以下幾點:如果用戶鍵入錯誤的用戶名或密碼,他仍然在登錄頁面並使用jquery,他會得到通知他輸入了錯誤的用戶名或密碼。codeigniter和jquery用戶身份驗證
我的問題是成功,那就是如果他輸入正確的用戶名和密碼,我設法用簡單的JavaScript重定向發送登錄頁面上的用戶,但那不是我想要的。如果我使用簡單的JavaScript重定向,我無法填充用戶會話數據,我需要在所有其他頁面上登錄後跟蹤用戶。
我想如果可能的話,如果用戶輸入正確的用戶名和密碼,jquery什麼也不做,並且只有在用戶輸入錯誤的用戶名或密碼的情況下才能激活該功能。
這是我的代碼。 JS代碼第一:
formLogin.on('submit', function(e) {
e.preventDefault();
$.ajax({
type : 'POST',
url : 'loginCheck',
data : formLogin.serialize(),
dataType : 'json',
success : function(r) {
if (r.status) {
// this works, but I would like this part to do nothing
// just to leave my PHP controller to redirect the user
window.location = 'http://www.linkedin.com';
} else {
$('#errorMessageTop').fadeIn();
}
}
});
});
而控制器代碼:
public function loginCheck()
{
// set the validation rules
$this->form_validation->set_rules('username', 'Username', 'required|trim|encode_php_tags');
$this->form_validation->set_rules('password', 'Password', 'required|trim|encode_php_tags');
$this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
if ($this->form_validation->run() != FALSE)
{
$ids=array();
$ids[0]=$this->db->where('username', $this->input->post('username'));
$ids[1] = $this->db->where('password', md5($this->input->post('password')));
$query = $this->backOfficeUsersModel->get();
if($query)
{
$data = array(
'username' => $this->input->post('username'),
'isUserLoggedIn' => true
);
$isAuthenticated = true;
if ($isAuthenticated) {
$return['status'] = true;
$return['message'] = 'You have successfully been logged in!';
exit(json_encode($return));
$this->session->set_userdata($data);
$data['title'] = "Welcome to dashboard!";
$data['main_content'] = 'dashboard';
$this->load->vars($data);
$this->load->view('backOffice/template');
}
} else {
$return = array(
'status' => false,
'message' => 'Wrong Username or Password'
);
exit(json_encode($return));
}
} else {
$errorMessage = "Second Message Wrong username or pwd...!";
$errorMessage = json_encode($errorMessage);
}
} // end of function loginCheck
任何幫助將十分讚賞。
問候,卓然
===============
從控制器的新代碼:
public function loginCheck()
{
// set the validation rules
$this->form_validation->set_rules('username', 'Username', 'required|trim|encode_php_tags');
$this->form_validation->set_rules('password', 'Password', 'required|trim|encode_php_tags');
$this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
if ($this->form_validation->run() != FALSE)
{
$ids=array();
$ids[0]=$this->db->where('username', $this->input->post('username'));
$ids[1] = $this->db->where('password', md5($this->input->post('password')));
$query = $this->backOfficeUsersModel->get();
if($query)
{
$data = array(
'username' => $this->input->post('username'),
'isUserLoggedIn' => true
);
$this->session->set_userdata($data);
echo json_encode(array("success" => true));
$data['title'] = "Welcome to dashboard!";
$data['main_content'] = 'dashboard';
$this->load->vars($data);
$this->load->view('backOffice/template');
} else {
echo json_encode(array("success" => false, "error" => "Wrong credentials"));
}
} else {
$errorMessage = "Second Message Wrong username or pwd...!";
$errorMessage = json_encode($errorMessage);
}
} // end of function loginCheck
而且JS代碼:
$("#formLogin").submit(function(e){
e.preventDefault();
var username = $(this).find("#username").val();
var password = $(this).find("#password").val();
var obj = {username: username, password: password};
var url = $(this).attr("action");
$.post(url, obj, function(r){
if(r.success) window.location.replace('http://www.linkedin.com');
else $('#errorMessageTop').fadeIn();
}, 'json');
})
要重定向成功後,用戶在哪裏?如果沒有在那裏只是刪除該代碼 –
刪除代碼只是導致用戶在登錄頁面停滯不前,因爲防止默認我猜 – Zoran