1
我有以下控制器,它在驗證窗體和顯示錯誤方面工作正常。CodeIgniter窗體驗證錯誤重定向
用戶試圖從登錄:http://mydomain.com/index.php/login
然而,當用戶輸入錯誤的憑證,它正確地加載登錄視圖(因爲它應該),並顯示錯誤「無效登錄」正常,但URI在瀏覽器窗口中顯示:
http://mydomain.com/index.php/verify_login(與上面相反)。
如何在驗證失敗後,重定向到只是 「.../index.php文件/登錄」
這裏是有問題的代碼:
<?
class Login extends CI_Controller {
public function index()
{
$this->load->helper(array('form'));
$this->load->helper('url');
$this->load->view('login_page');
}
function verify_login()
{
$this->load->model('login_model','',TRUE);
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<label class="error">', '</label>');
$this->form_validation->set_rules('username', 'Login', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
if($this->form_validation->run() == FALSE)
{
//Field validation failed. User redirected to login page
$this->index();
}
else
{
//Go to private area
redirect('private_area', 'refresh');
}
}
function check_database($password)
{
//Field validation succeeded. Validate against database
$username = $this->input->post('username');
//query the database
$result = $this->login_model->login($username, $password);
if($result)
{
$sess_array = array();
foreach($result as $row)
{
$sess_array = array(
'id' => $row->id,
'username' => $row->username
);
$this->session->set_userdata('logged_in', $sess_array);
}
return TRUE;
}
else
{
$this->form_validation->set_message('check_database', '<div class="alert alert-error">Invalid username or password</div>');
return false;
}
}
}
UPDATE: Cyrode的解決方案修復該問題,但現在它不會在加載視圖時從check_database()函數顯示「無效登錄」錯誤消息(set_message)。任何想法我在這裏做錯了嗎?
更新2: 在這裏你去:
class Login extends CI_Controller {
public function index()
{
$this->load->helper(array('form'));
$this->load->helper('url');
$this->load->view('login_page');
$this->load->model('login_model','',TRUE);
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<label class="error">', '</label>');
$this->form_validation->set_rules('username', 'Login', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
if($this->form_validation->run() == FALSE)
{
$this->load->view('login_page');
}
else
{
//Go to private area
redirect('private_area', 'refresh');
}
}
function check_database($password)
{
//Field validation succeeded. Validate against database
$username = $this->input->post('username');
//query the database
$result = $this->login_model->login($username, $password);
if($result)
{
$sess_array = array();
foreach($result as $row)
{
$sess_array = array(
'id' => $row->id,
'username' => $row->username
);
$this->session->set_userdata('logged_in', $sess_array);
}
return TRUE;
}
else
{
$this->form_validation->set_message('check_database', '<div class="alert alert-error">Invalid username or password</div>');
return false;
}
}
}
Hey Cryode,謝謝,這解決了這個問題,但現在它不會在加載視圖時從check_database()函數顯示「Invalid Login」錯誤消息。有任何想法嗎? – Dodinas
我不知道爲什麼該功能會停止 - 所有這一切是將相同的代碼合併到一個方法,而不是使用兩個。也許添加您的當前代碼到您的問題。 –
感謝您對xss和hashing的評論。會這樣做。 – Dodinas