1

1つのユースケースを除いて機能する検証付きのログインフォームがあります。

ユーザーが有効なメールアドレスを入力し、パスワードがない場合、「パスワードが必要です」というメッセージのみを表示したいのですが、現在、「パスワードが必要です」というメッセージと「不正なメール/パスワード」メッセージの両方が表示されています。

理由はわかりますが、他の検証に合格した場合にのみコールバックが実行されるようにこのコードを変更する方法がわかりません。

public function login_validation() {
    $this->load->library('form_validation');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean|callback_validate_credentials');
    $this->form_validation->set_rules('password', 'Password', 'required|md5');
    $this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');

    if ($this->form_validation->run()) {
        $data = array(
            'email' => $this->input->post('email'),
            'staff_logged_in' => 1
        );
        $this->session->set_userdata($data);
        redirect('clock/clock');
    } else {
        $this->load->view('login/login');
    }
}

public function validate_credentials() {
    $this->load->model('staff_model');

    if ($this->staff_model->can_log_in()) {
        return true;
    } else {
        $this->form_validation->set_message('validate_credentials', 'Incorrect Email/Password');
        return false;
    }

}
4

1 に答える 1

1

資格情報の検証にフォーム検証自体を使用しないでください。とにかく、それは私の理解からの入力を検証することを本当に意味しています。form_validationライブラリでは入力を受け取らないため、入力を関数に個別に渡す必要があります。以下のようなもの。

public function login_validation() {
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'required|md5');
$this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');

if ($this->form_validation->run()) {
    $this->validate_credentials($this->input->post($email),$this->input->post($password));
    $data = array(
        'email' => $this->input->post('email'),
        'staff_logged_in' => 1
    );
    $this->session->set_userdata($data);
    redirect('clock/clock');
} else {
    $this->load->view('login/login');
}

}

于 2012-11-08T15:08:55.190 に答える