簡體   English   中英

登錄驗證代碼點火器

[英]Login verification codeigniter

我的用戶表:

  1. user_id PK
  2. 用戶名
  3. 密碼
  4. 創建日期

視圖:

<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。 還是我必須返回字符串? 例如,對於無效的用戶名,返回“用戶名”,對於錯誤的密碼,返回“密碼”,只需更改控制器中的if語句以使其匹配並發送適當的消息即可。

或者,還有更好的方法? 我一直想起try catch,但是我還沒有真正使用過它,所以如果它是一種更好的方法,那么我會做的,但是有人可以在這里發布代碼作為參考。

還是只是最好不要具體說明它,而只是將這兩個實例的消息輸入為“無效的用戶名/密碼”,然后讓用戶找出來?

特別提示用戶該用戶名或密碼不正確是不正確的。 如果您引用Google或Facebook之類的著名網站,它們不會告訴您哪個是不正確的。 因此,請嘗試顯示錯誤,因為Username or password are incorrect

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM