0

私はログインユーザーです。したがって、ユーザーごとに電子メールとパスワードを入力した後、その電子メールとパスワードを持つユーザーが存在するかどうかを確認したいと思います。このため、where 句を 2 回使用していますが、どういうわけか機能していません。使い方が間違っているからかもしれません。以下のコードを修正するにはどうすればよいですか

$this->db->where('email', $this->input->post('email'));
$this->db->where('password', $pass . $salt);
4

2 に答える 2

0

どこでうまく機能していますか、それは間違っている2番目です。パスワードとソルトを渡していますが、何もエンコードしておらず、それらを連結しているだけです。したがって、パスワードが bob で、salt が pepper の場合、bobpepper をパスワード フィールドとしてクエリに渡します。

暗号化に応じて、コードは次のようになります。

 $password = md5($this->input->post('password'). $salt);  //swap the md5 for whatever encryption method you're using.
 $this->db->where('email', $this->input->post('email'));
 $this->db->where('password', $password);
于 2012-11-19T19:21:42.343 に答える
0

where 句を 2 回実行する必要はありません。

public function login(){

    try
    {
        $user = $this->db->select()->where()->get(); // mysql query

        if( !$user)
            throw new Exception("User not found!");

        if( !$this->compare_password($this->input->post('password'), $user->password ) )
            throw new Exception("Passwords did not match!");
    }
    catch(Exception $e) 
    {
        $this->session->set_flashdata('error', $e->getMessage());
        log_message('error', $e->getMessage()); 
        redirect('/');
    }

    //we got this far so everything should be OK

    $this->session->set_flashdata('success', 'Login Successfull');
    redirect('dashboard');
}

注:プロダクション モードでは、これよりも優れたパスワード ハッシュ アルゴリズムを使用することをお勧めします。

protected function hash_password($password){
    return sha1( $pw . $this->config->item('encryption_key') );
}

protected function compare_password($pw, $dbpw){
    return ( sha1($pw . $this->config->item('encryption_key') ) === $dbpw )
}
于 2012-11-19T19:46:26.730 に答える