19/08/2019, 07:54

Gem devise - Xác thực tài khoản trong Ruby on rails.

Devise cung cấp tính năng xác thực người dùng trong Rails. Hoạt động theo mô hình MVC, dựa trên khái niệm modules. Bao gồm tất cả 10 modules: Database Authenticable: mã hóa và lưu mật khẩu trên database để xác thực người dùng. Omniauthable: Hỗ trợ đăng nhập bên ...

Devise cung cấp tính năng xác thực người dùng trong Rails. Hoạt động theo mô hình MVC, dựa trên khái niệm modules.

Bao gồm tất cả 10 modules:

  • Database Authenticable: mã hóa và lưu mật khẩu trên database để xác thực người dùng.
  • Omniauthable: Hỗ trợ đăng nhập bên thứ 3 (google, facebook,...)
  • Confirmable: Gửi email để xác thực khi đăng kí, hoặc thay đổi email tài khoản, mật khẩu...
  • Recoverable: Tạo lại mật khẩu mới phục vụ trường hợp quên mật khẩu người dùng.
  • Registerable: Xử lí việc đăng kí người dùng mới, đồng thời cho phép họ chỉnh sửa và hủy tài khoản chính mình.
  • Rememberable: Quản lí việc tạo và xóa token ghi nhớ tài khoản bằng cookie.
  • Trackable: Theo dõi số lần đăng nhập, thời gian đăng nhập và địa chỉ IP.
  • Timeoutable: Kiểm soát thời gian phiên hoạt động.
  • Validatable: Cung cấp xác thực email và mật khẩu. Có thể chỉnh sửa theo ý muốn của mình.
  • Lockable: Khóa tài khoản sau một vài lần đăng nhập thất bại. Có thể mở khóa thông qua email hoặc khoảng thời gian nhất định.

Thêm gem devise trong file Gemfile.

Chạy bundle install như thường lệ.

Tiếp đó chạy lệnh: rails generate devise:install

Sau đó chạy câu lệnh sau để tạo model sử dụng devise: rails generate devise MODEL

MODEL là tên model sử dụng devise.

Ví dụ ta sử dụng model User hoặc Admin thì thay MODEL với tên tương ứng cần sử dụng. Sau khi chạy câu lệnh xong, sẽ tạo ra model tương ứng (nếu model chưa tồn tại) và cấu hình với các module Devise mặc định. Và nó cũng tạo ra resource tương ứng cho model. Bạn có thể thấy trong file config/routes.rb.

Mọi config devise sẽ nằm trong file config/initializers/devise.rb. Ta có thể tùy chỉnh theo ý muốn như là: validate email, password,.. trong file này.

Ví dụ:

config.email_regexp = /A([w.%+-]+)@([w-]+.)+([w]{2,})z/i - để validate email.

config.password_length = 6..128 - validate độ dài mật khẩu.

config.confirm_within = 2.days - thiết lập thời gian confirm email.

Devise cung cấp một số helper phục vụ cho view và controller.

Ví dụ để xác thực người dùng trước khi vào một controller thì ta dùng cấu trúc sau: before_action :authenticate_user! với model tên là User. Trường hợp model sử dụng devise có tên là Admin thì ta thay _user bằng _admin.

Login trên cũng tương tự với các helper sau:

user_signed_in? : xác minh người dùng đã đăng nhập hay chưa?

current_user: Trả về người dùng đăng nhập hiện tại.

user_session: Để truy cập phiên làm việc.

Ta chạy câu lệnh sau để tạo ra các view cho Devise rails generate devise:views để tùy chỉnh lại các view cho thích hợp.

Devise sử dụng strong params để truyền vào model nên khi ta tùy chỉnh view khi đăng kí hoặc đăng nhập thì ta phải cấu hình như sau để truyền các param khác vào.

Ví dụ, khi đăng kí và chỉnh sửa thông tin cá nhân yêu cầu người dùng nhập vào họ tên, số điện thoại, email và mật khẩu, ta sẽ cấu hình như sau:

Vào application_controller.rb thêm các câu lệnh sau:

before_action :configure_permitted_parameters, if: :devise_controller?

protected

def config_permitted_parameters
    added_attrs = [:name, :phone, :email, :password, :password_confirmation]
    devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
    devise_parameter_sanitizer.permit :account_update, keys: added_attrs
end

Gem devise là một gem rất hữu ích, giúp chúng ta quản lí người dùng, với rất nhiều tính năng đa dạng như mình đã kể trên. Còn rất nhiều tính năng khác các bạn có thể tham khảo trên https://github.com/plataformatec/devise

0