CodeIgniter と jQuery でユーザー認証をしようとしています。ユーザーが間違ったユーザー名またはパスワードを入力すると、ログインページに残り、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');
})