- vừa được xem lúc

Introduction has_secure_password in Rails app

0 0 10

Người đăng: vo chi hieu

Theo Viblo Asia

Cách sử dụng has_secure_passoword trong ứng dụng của bạn

  1. Nó là cái gì và tại sao phải dùng nó?

Khi bạn xây dụng một ứng dụng thì điều vô cùng quan trong đó chính là authenticate người dùng. Bằng cách sử dụng has_secure_password thì công việc ấy trở nên vô cùng dễ dàng. Tuy nhiên bạn đã hiểu rõ hết tất cả các chức năng mà nó mang lại. Bài viết một phần sẽ giới thiệu những chức năng chính của nó theo góc nhìn của mình. Feel free to leave all the comments bellow 🙇

  1. Install Cách cài đặt vô cùng quan trong. Bạn chỉ cần thêm has_secure_password vào model của bạn và đừng quên thêm gem brcrypt nhé. Nó sẽ dự vào gem nào để encrypt password.

    gem 'bcrypt', '~> 3.1.7'

Sau khi cài đặt gem bcrypt, bạn cần có phải tạo model. Follow documention của nó https://api.rubyonrails.org/v7.1.3.2/classes/ActiveModel/SecurePassword/ClassMethods.html, bạn phải thêm column có định dạng là XXX_digest. Dưới đây là một ví dụ bạn cứ copy và thêm các column mà mình mong muốn. Về column password_digest thì nó quá rõ ràng rồi đúng không dùng để validate password, còn hai column còn lại mình sẽ giải thích sau.

rails g model User email:string password_digest:string recovery_password_digest:string password_challenge:string
  1. Những chức năng chính?

Chúng ta cùng điểm qua những function mà this bad boy has_secure_passoword bring into your model.

Encrypt password and authenticate password

Xét ví dụ sau đây bạn sẽ hiểu

user = User.new(email: "email@gmail.com", password: "123456", password_confirmation: "")
user.save # false, password confirmation không hợp user.password_confirmation="123456"
user.save # true user.authenticate("invalid_password") # false
user.authenticate("123456") # user

Như bạn thấy đó has_secure_password tạo thêm cho bạn 2 attributes ảo là password và password_confirmation, ngoài ra nó cũng cung cấp thêm phương thức authenticate để giúp bạn validate password user nhập là đúng hay không. Bạn có thể dùng nó để làm chức năng sign_in nhá.

Recovery password

Môt chức năng có thể thấy là ứng dụng nào cũng có đó là forgot password.

user.recovery_password = "42password"
user.recovery_password_digest # => "$2a$04$iOfhwahFymCs5weB3BNH/uXkTG65HR.qpW.bNhEjFP3ftli3o5DQC"
user.save # => true

Đầu tiên user sẽ click forgot password. Lúc này BE chúng ta tự tạo recovery_password, bạn có thể random bất cứ thứ gì tuỳ thuộc vào bạn. Sau đó bạn sẽ gửi email với cái recovery password vừa tạo lúc này. User bất buộc phải nhập recovery code trong mail trên UI và submit xuống BE chúng ta. Lúc đó chúng ta chị cần verify cái recovery code đó.

user.authenticate_recovery_password("42password") # => user

Ok!. Nếu pass authenticate_recovery_password mình chuyển hướng user đến trong udpate password thôi, easy ấy mà ✌️

Update password with password challenge Khi đến trang update password thì có những cách update password nào đây. Thông thường mình sẽ update password như thế. này đúng không

user.update!(password: "new_password", password_confirmation: "new_password")

Một câu hỏi đặt ra nữa, bây giờ chúng ta không muốn user không được sử dụng mật khẩu cũ để update hay chúng ta muốn lưu lại mật khẩu cũ để có reset lại account cho user trong trường hợp user đánh cập mật khâu, thì làm sao. Hãy xem một cách tiếp cận mới nhé

user.update(password: "new_password", password_challenge: "old_password")

Lưu ý ở đây password_challenge là password cũ đó nhe. Cách cài đặt đảm bạo bạn muốn chính tay user đó thực hiện đổi mật khẩu hay bạn có thể validate mật khẩu mới không thể trùng với mật khẩu cũ. Một ý nữa trong trường hơp hacker đánh cắp tài khoản của user và tiến hành update mật khẩu mới, bạn có thể lại reset lại mật khẩu cho user nhé. Đồng

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 222

- vừa được xem lúc

Rails Memoization

Memoization is a process that can be used to speed up rails methods. It caches the results of methods that do time-consuming work, work that only needs to be done once. Here is an example. Example.

0 0 48

- vừa được xem lúc

Tại sao Rails lại dùng cả Webpack lẫn Sprocket?

Khi Rails 6 được ra mắt, có thể bạn đã từng tự hỏi. WTF, sao Webpack đã được add vào rồi, mà Sprocket vẫn tồn tại thế kia . Chẳng phải Webpack và Sprocket được dùng để giải quyết chung một công việc hay sao. Hoặc cả đây:.

0 0 59

- vừa được xem lúc

Bạn nên sử dụng Elasticsearch trong ứng dụng Ruby On Rails như thế nào?

Elasticsearch là một công cụ phân tích và mã nguồn mở mạnh mẽ và linh hoạt, phân tán, theo thời gian thực. Đó là tiêu chuẩn vàng trong công nghệ tìm kiếm.

0 0 80

- vừa được xem lúc

Form object pattern trong rails

1.Mở đầu.

0 0 111

- vừa được xem lúc

Sử dụng Twilio để gửi SMS trong ứng dụng Ruby on Rails

Ngoài cách xác nhận tài khoản hay gửi thông báo bằng email thì hôm nay mình sẽ hướng dẫn các bạn 1 cách nữa là thông qua SMS/Voice. Công cụ sử dụng sẽ là gem Twilio. Installation. Để cài đặt bằng Bundler, hãy lấy phiên bản mới nhất:.

0 0 67