登录验证codeigniter

时间:2018-02-09 16:54:45

标签: php codeigniter

我的用户表:

  1. user_id PK
  2. 用户名
  3. 密码
  4. DATE_CREATED
  5. 查看:

    <div class="container">
        <div class="row">
        <div class="col-md-3">
        </div>  
        <div class="col-md-6">
        <?php
        $message = $this->session->flashdata('message');
        $form_error = $this->session->flashdata('error');
        ?>
        <div class="lg-md-2" align="center"><?php if(isset($message)){ echo $message; }?></div>
            <form method="post" action="<?php echo base_url();?>account/login">
              <div class="form-group">
                <label for="username">Username</label>
                <input class="form-control" id="username" name="username" type="text">
                <div id="form_error"><?php echo $form_error['username']; ?></div>
              </div>
              <div class="form-group">
                <label for="Password">Password</label>
                <input class="form-control" id="password" name="password" type="password">
                <div id="form_error"><?php echo $form_error['password']; ?></div>
              </div>
              <button type="submit" class="btn btn-primary btn-block">Submit</button>
            </form>
            <div class="text-center">
              <a class="d-block small mt-3" href="<?php echo base_url();?>pages/register_user">Register an Account</a>
            </div>       
        </div>
        <div class="col-md-3">
        </div>
        </div>
    
    </div>
    
    
    
    </body>
    

    控制器:

    public function login(){
        $this->form_validation->set_rules('username', 'Username', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required');
    
        if($this->form_validation->run() == FALSE){
        $form_error = array('username' => form_error('username'),
                        'password' => form_error('password'));
        $this->session->set_flashdata('error',$form_error);
        redirect('pages/login_user');
        }else{
        $data = array('username' => $this->input->post('username'),
                'password' => $this->input->post('password'));
        $result = $this->account_model->login_account($data);
        if($result  ){
        $new_session = array('username' => $result,
                            'is_logged_in' => TRUE);    
        $this->session->set_userdata($new_session);
    
        //redirect('pages/view_home');
        }else{
        $message = $this->session->set_flashdata('message', 'Incorrect Password');
        redirect('pages/login_user');
        }}
        }
    

    型号:

    public function login_account($data){
    $query = $this->db->get_where('users', array('username' => $data['username']))->result();
    if($query){
    foreach($query as $row){
    if(password_verify($data['password'], $row->password)){
    return $row->username;}else{ return FALSE;}}
    }else{ return FALSE; }
    }
    

    我的问题是,如果函数失败,如果密码不正确或者用户名不存在,我想要具体说明。

    在我的模型中,两个场景我都返回FALSE。还是我必须返回字符串?如,返回&#39;用户名&#39;对于无效的用户名和返回密码&#39;对于不正确的密码,只需更改控制器中的if语句以匹配该密码并发送相应的消息。

    还是有更好的方法吗?我一直想起尝试捕获,但我还没有真正使用它,所以如果它是一个更好的方式然后我会这样做,但有人可以在这里发布代码作为参考。

    或者最好不要具体说明它,只是输入消息为“无效的用户名/密码”。对于这两个实例并让用户弄明白吗?

1 个答案:

答案 0 :(得分:0)

具体提示用户,用户名或密码不正确是不正确的。如果您推荐谷歌或脸书等知名网站,他们不会告诉您哪一个不正确。因此,请尝试将错误显示为Username or password are incorrect