Hướng dẫn forgot password php bootstrap - quên mật khẩu php bootstrap

Khi user quên mật khẩu , web dev sẽ làm gì? Tạo mật khẩu mới rồi gửi cho họ, cơ bản là vậy. Sau đây là những gợi ý hướng dẫn thực hiện.

Hướng dẫn forgot password php bootstrap - quên mật khẩu php bootstrap

Thực hiện theo gợi ý sau:

1. Tạo view quên mật khẩu

Trong file views/quenpass.php, trong đó tạo form như sau:

a. Thuộc tính method của form là post và thuộc tính là action là xulygoipasspost và thuộc tính là action là xulygoipass

b. Form có 1 textfield để nhập email và 1 nút submit

 <link href="https://cdn.jsdelivr.net/npm//dist/css/bootstrap.min.css" rel="stylesheet">
 <div class="col-md-9 m-auto" >
  <div class="card">
   <div class="card-header bg-info"> QUÊN MẬT KHẨU</div>
   <div class="card-body">
     <form class="form-horizontal" method="POST" action="..." >
         <p>  <label class="control-label">Email:</label>            
              <input class="form-control" name="email">     
         </p>       
         <p><button type="submit" class="btn btn-warning">Gửi mail</button></p>
     </form>
   </div>
 </div>
 </div>       

2. Tạo action quên mật khẩu

– Nạp view quenpass.phpquenpass.php

Hướng dẫn forgot password php bootstrap - quên mật khẩu php bootstrap

3. Tạo action xử lý quên pass

– Tạo action xulyquenpass :

case "xulyquenpass" : $this->xulyquenpass(); break;

– Trong view quenpass.php, thuộc tính action của form, trỏ vào action xulyquenpass vừa tạoxulyquenpass vừa tạo

– Code trong hàm xulyquenpass theo gợi ý sau:

a. Tiếp nhận email :     $email = $_POST[’email’];

b. Nếu  $email là rỗng thì báo lỗi

c. Nếu $email không đúng dạng (dùng hàm filter_var) thì báo lỗi

d. Nếu $email không có trong bảng users thì báo lỗi

e. Tạo chuỗi ngẫu nhiên để làm mật khẩu mới:  $passnew = substr(md5(rand(0,9999),0,6);

f. Cập nhật mật khẩu mới tạo vào bảng users mật khẩu  (có thể mã hóa nếu cần)

g. Gởi mail cho user chuỗi ngẫu nhiên (chưa mã hóa)

f. Chuyển hướng đến trang khác (thông báo, trang chủ…)


Tại sao khi user quên mật khẩu thì chúng tas phải gởi mail? Vì mật khẩu của user trong database thường phải mã hóa để đảm bảo an toàn, admin không thể biết mật khẩu của mọi người, và cũng không rãnh để cung cấp mật khẩu khi user quên.

Gửi mail cho họ là cách tốt nhất, tuy nhiên, có giải pháp khác là gửi token thôi (string ngẫu nhiên) cho so khớp thì chúng ta hiện ra trang reset pass để họ nhập mật khẩu mới. Cách làm này sẽ có hướng dẫn sau nhé.

Hướng dẫn cách tạo form, phát sinh mật khẩu mới , cập nhật mật khẩu mới vào database và gửi mail cho user

Hướng dẫn forgot password php bootstrap - quên mật khẩu php bootstrap

  1. Tạo database và bảng users (nếu chưa có)
    • Tạo database hocPHPhocPHP
    • Tạo table users có 11 field : id, tendangnhap, matkhau, hoten, email, ngaysinh, phai, ngaydangky, idgroup (0 – thành viên , 1 admin),  active (0 chưa kích hoạt, 1 đã kích hoạt), randomkeyid, tendangnhap, matkhau, hoten, email, ngaysinh, phai, ngaydangky, idgroup (0 – thành viên , 1 admin),  active (0 chưa kích hoạt, 1 đã kích hoạt), randomkey
    • Nhập vài users
    • ratvui/Vu1TungPhutG1@y
    • ratbuon/Bu0nTungPhutG1@y
  2. Tạo form
    • Theo hình trên, sử dụng code hỗ trợ của bootstrap:
  3. Xử lý khi submit
    • Hiện $_POST nằng print_r
    • Lấy giá trị email trong $_POST
    • Kiểm tra email có trong db không, không thì báo lỗi, ngược lại thì:
      • Tạo mật khẩu ngẫu nhiên
      • Cập nhật db
      • Thực hiện gửi mail :
        • Download https://github.com/PHPMailer/PHPMailer   rồi ciải nén và chép vào folder website
        • Code gửi mail
require "PHPMailer-master/src/PHPMailer.php"; 
    require "PHPMailer-master/src/SMTP.php"; 
    require 'PHPMailer-master/src/Exception.php'; 
    $mail = new PHPMailer\PHPMailer\PHPMailer(true);//true:enables exceptions
    try {
        $mail->SMTPDebug = 0; //0,1,2: chế độ debug
        $mail->isSMTP();  
        $mail->CharSet  = "utf-8";
        $mail->Host = 'smtp.gmail.com';  //SMTP servers
        $mail->SMTPAuth = true; // Enable authentication
        $mail->Username = 'emailCủaBạnỞGmail'; // SMTP username
        $mail->Password = 'MậtKhẩuEmailCuaBan';   // SMTP password
        $mail->SMTPSecure = 'ssl';  // encryption TLS/SSL 
        $mail->Port = 465;  // port to connect to                
        $mail->setFrom('emailCủaBạnỞGmail', 'Tên người gửi' ); 
        $mail->addAddress('emailNguoiNhan', 'TênNgườiNhận'); 
        $mail->isHTML(true);  // Set email format to HTML
        $mail->Subject = 'Tiêu đề thư';
        $noidungthu = 'Nội dung thư'; 
        $mail->Body = $noidungthu;
        $mail->smtpConnect( array(
            "ssl" => array(
                "verify_peer" => false,
                "verify_peer_name" => false,
                "allow_self_signed" => true
            )
        ));
        $mail->send();
        echo 'Đã gửi mail xong';
    } catch (Exception $e) {
        echo 'Error: ', $mail->ErrorInfo;
    }