Hướng Dẫn Sử Dụng has_secure_password Trong Ứng Dụng Rails
1. has_secure_password Là Gì Và Tại Sao Cần Sử Dụng Nó?
Khi xây dựng một ứng dụng, việc xác thực người dùng là rất quan trọng. has_secure_password
giúp bạn thực hiện điều này một cách dễ dàng và hiệu quả. Bài viết này sẽ cung cấp cho bạn cái nhìn tổng quan về những chức năng chính mà nó mang lại và cách áp dụng trong ứng dụng của bạn. Hãy cảm thấy tự do để lại bình luận ở bên dưới nếu bạn có bất kỳ câu hỏi nào.
2. Cách Cài Đặt has_secure_password
Để cài đặt has_secure_password
, bạn cần thêm dòng sau vào model của mình. Đồng thời, đừng quên thêm gem bcrypt
để mã hóa mật khẩu.
ruby
gem 'bcrypt', '~> 3.1.7'
Sau khi cài đặt gem bcrypt
, bạn cần tạo model mới với các trường cần thiết. Theo tài liệu hướng dẫn của Rails, bạn phải thêm cột với định dạng là XXX_digest
. Ví dụ sau đây có thể giúp bạn dễ dàng điền vào các cột cần thiết:
bash
rails g model User email:string password_digest:string recovery_password_digest:string password_challenge:string
Cột password_digest
sẽ lưu trữ mật khẩu đã được mã hóa, trong khi các cột khác sẽ phục vụ cho các chức năng đặc biệt mà chúng ta sẽ thảo luận sau.
3. Những Chức Năng Chính Của has_secure_password
Mã hóa và Xác Thực Mật Khẩu
has_secure_password
cung cấp cho bạn hai thuộc tính ảo là password
và password_confirmation
, cùng với các phương thức để xác thực mật khẩu người dùng.
ruby
user = User.new(email: "email@gmail.com", password: "123456", password_confirmation: "")
user.save # false, vì password confirmation không hợp lệ
user.password_confirmation = "123456"
user.save # true
user.authenticate("invalid_password") # false
user.authenticate("123456") # user
Như vậy, bạn có thể sử dụng phương thức authenticate
để kiểm tra tính hợp lệ của mật khẩu khi người dùng đăng nhập.
Khôi Phục Mật Khẩu
Một tính năng phổ biến khác mà ứng dụng nào cũng cần có là chức năng quên mật khẩu. Khi người dùng nhấn vào nút "Quên mật khẩu", bạn tạo ra một recovery_password
, có thể là một chuỗi ngẫu nhiên.
ruby
user.recovery_password = "42password"
yser.recovery_password_digest # => "$2a$04$iOfhwahFymCs5weB3BNH/uXkTG65HR.qpW.bNhEjFP3ftli3o5DQC"
user.save # => true
Sau khi gửi mã khôi phục mật khẩu qua email, người dùng chỉ cần nhập mã này để xác thực và cập nhật mật khẩu mới.
ruby
user.authenticate_recovery_password("42password") # => user
Cập Nhật Mật Khẩu Với Thách Thức Mật Khẩu
Khi người dùng cập nhật mật khẩu, bạn có thể kiểm tra xem họ có đang sử dụng mật khẩu cũ hay không.
ruby
user.update!(password: "new_password", password_confirmation: "new_password")
Để đảm bảo tính an toàn, bạn có thể yêu cầu người dùng nhập password_challenge
- mật khẩu cũ của họ:
ruby
user.update(password: "new_password", password_challenge: "old_password")
Việc này không chỉ giúp ngăn chặn việc sử dụng lại mật khẩu cũ mà còn cung cấp cách để khôi phục tài khoản khi có sự cố xảy ra.
Kết Luận
has_secure_password
không chỉ giúp bạn mã hóa mật khẩu một cách an toàn mà còn mang lại nhiều chức năng hỗ trợ xác thực người dùng hiệu quả trong ứng dụng Rails của bạn. Với những hướng dẫn và ví dụ cụ thể trên đây, hy vọng bạn có thể dễ dàng áp dụng vào dự án của mình.
source: viblo