所以我是C的新手。我和我有一个教程中的这种代码,它很干净。我设法使用";密码BCRYPT";它成功地存储到数据库中。我的问题是,我可以设法填写正确的信息,这样我的登录模型就会成功。
插入模型
public function insert_user(){
$password = $this->input->post('Password');
$hash = password_hash($password, PASSWORD_BCRYPT);
$data = array(
'Username' => $this->input->post('Username'),
'Password' => $hash,
'Position' => $this->input->post('Position'),
'Office' => $this->input->post('Office'),
);
print_r($data);
return $this->db->insert('users', $data);
}
登录模型
public function login(){
$this->db->where('Username', $this->input->post('Username', true));
$this->db->where('Password', $this->input->post('Password', true));
$result = $this->db->get('users');
if($result->num_rows() == 1){
return $result->row_array();
}else{
return false;
}
控制器
public function log_in(){
$this->form_validation->set_error_delimiters('<div class="error">','</div>');
$this->form_validation->set_rules('Username', 'Username', 'required');
$this->form_validation->set_rules('Password', 'Password', 'required');
if($this->form_validation->run() == FALSE){
$page = "login";
if(!file_exists(APPPATH.'views/pages/'.$page.'.php')){
show_404();
}
$this->load->view('pages/'.$page);
}else{
$user_id = $this->Page_model->login();
if($user_id){
$user_data = array(
'Username' => $user_id['Username'],
'Position' => $user_id['Position'].' '.$user_id['Username'],
'Office' => $user_id['Office'],
'logged_in' => true
);
$this->session->set_userdata($user_data);
$this->session->set_flashdata('user_log', 'You are now loged in as '
.$this->session->Position);
redirect(base_url());
}else{
$this->session->set_flashdata('failed', 'Username/Password not match');
redirect(base_url().'log_in');
}
}
}
是不是有人给我一些如何让它发挥作用的建议。
我尝试了一些方法,但正如你所期望的那样,根本没有成功。
Ass@vee说最好总是检查文档。
以下解释引用自文件:
当前支持以下算法:
- PASSWORD_DEFAULT-使用bcrypt算法(从PHP 5.5.0开始默认(。请注意,随着新的更强的算法添加到PHP中,这个常数会随着时间的推移而变化。因此使用此标识符的结果的百分比可能会随着时间的推移而变化。因此,建议将结果存储在数据库列中可以扩展到60个字符以上(255个字符将是一个不错的选择(
- PASSWORD_BCRYPT-使用CRYPT_BLOWFISH算法创建哈希。这将使用"2y$";标识符。结果将始终是一个60个字符的字符串,或者失败时为false
- PASSWORD_ARGON2I-使用ARGON2I哈希算法创建哈希。只有当PHP使用Argon2支持
- PASSWORD_ARGON2ID-使用ARGON2ID哈希算法创建哈希。此算法仅在编译PHP时可用支持Argon2
对于password_hash成本变量的第三个参数选项,可以使用
cost(int(-表示应该使用的算法成本。这些值的示例可以在crypt((页面上找到。
- CRYPT_BLOWFISH-用盐进行BLOWFISH散列如下:"$2a$"2x$";或"$2y$";,一个两位数的成本参数$&";,以及字母表中的22个字符"/0-9A-Za-z";。在salt中使用此范围之外的字符将导致crypt((返回零长度字符串。两位数的开销参数是基于Blowfish的基础哈希算法的迭代计数的以2为底的对数,并且必须在04-31范围内,超出该范围的值将导致crypt((失败"2x$";散列可能很弱"2a$";哈希是兼容的,可以缓解这种弱点。对于新散列$2y$";应该使用
使用password_verify((时,在将用户条目与哈希保存的密码进行比较之前,无需对其进行哈希处理。由于每次对密码进行哈希处理时,它都会生成不同的哈希输出,但password_verify((会对输入和以前存储的哈希版本进行反哈希处理和比较。官方文件中的示例。
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>