Giới thiệu Gem Devise
1.Giới thiệu Hôm nay mình xin giới thiệu tới các bạn 1 gem trong Ruby on Rails mà được rất nhiều lập trình viên sử dụng.đó chính là Gem Devise Devise là một gem rất linh hoạt được sử trong quá trình xác thực người dùng.Nó hỗ trợ hầu hết tất cả mọi việc bạn cần trong việc quản lí và xác thực ...
1.Giới thiệu
Hôm nay mình xin giới thiệu tới các bạn 1 gem trong Ruby on Rails mà được rất nhiều lập trình viên sử dụng.đó chính là Gem Devise
Devise là một gem rất linh hoạt được sử trong quá trình xác thực người dùng.Nó hỗ trợ hầu hết tất cả mọi việc bạn cần trong việc quản lí và xác thực người dùng trong hệ thống của bạn.Nó cho phép bạn có thể tạo nhiều Model trong cùng một lúc;Nó dược xây dựng dựa trên các module nên bạn có thể chỉ sử dụng những gì bạn thực sự cần.Gem devise có 10 module chính sau:
Tên module | Chức năng chính |
---|---|
Database Authenticatable | encrypts và lưu trữ mật khẩu trong cơ sở dữ liệu để xác nhận tính xác thực của một người sử dụng.Việc xác thực có thể được thực hiện thông qua POST hoặc HTTP Basic Authentication.. |
Omniauthable | thêm OmniAuth (https://github.com/intridea/omniauth) hỗ trợ |
Confirmable | gửi email hướng dẫn xác nhận và xác minh một tài khoản đã đăng kí đúng với email. |
Recoverable | reset mật khẩu người dùng và gửi hướng dẫn đặt lại. |
Registerable | xử lý việc đăng ký người sử dụng thông qua một quá trình đăng ký, cũng cho phép họ để chỉnh sửa và phá hủy tài khoản của họ. |
Rememberable | quản lý tạo ra một mã thông báo cho người sử dụng ghi nhớ từ một cookie được lưu. |
Trackable | Đếm số lần đăng nhập,thời gian và địa chỉ IP của từng lần đăng nhập đó. |
Timeoutable | một khoảng thời gian nhất định mà người dùng chưa đăng nhập lại. |
Validatable | Xét tính hợp lệ của email và mật khẩu |
Lockable | khóa tài khoản sau khi một số quy định nhất đinh của việc đăng nhập thất bại.Có thể mở khóa thông qua email hoặc sau một thời gian xác định. |
2.Cài đặt
Tạo một project mới trong cửa sổ console
rails new demo_devise
Thêm gem devise vào Gemfile
gem 'devise'
gõ các lệnh sau trong màn hình console
bundle install rails generate devise:install
Sau khi add gem devise vào bước tiếp theo cần generate model sử dụng dem devise cho hệ thống.Ví dụ bạn muốn quản lí người dùng trong bảng User gõ lệnh sau.
rails generate devise User
màn hình console sẽ hiện.
invoke active_record create db/migrate/20151228154229_devise_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml insert app/models/user.rb route devise_for :users
Các file được tạo ra bao gồm: db/migrate/20151228154229_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration def change create_table(:users) do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count, default: 0, null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end
ở đây bạn có thể thêm các trường cần thiết trong các thiết lập của bạn.sao cho phù hopwj với các module mà bạn định sử dụng.
Trong fileapp/models/user.rb
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end
bạn có thể dùng các module bằng cách thêm các model để sử dụng.
Trong file routes.rb sẽ tự sinh ra resource của devise.
Rails.application.routes.draw do devise_for :users end
Bạn cần migrate lại dữ liệu.bằng cách thực hiện các lệnh sau.
bundle exec rake db:create bundle exec rake db:migrate
Tiếp theo, bạn cần phải thiết lập các tùy chọn URL mặc định cho Devise mailer. Dưới đây là một cấu hình trong file config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
bạn gõ rake routes để kiểm tra xem các đường dẫn của devise đã được cài đặt thành công chưa?
Prefix Verb URI Pattern Controller#Action new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy user_password POST /users/password(.:format) devise/passwords#create new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit PATCH /users/password(.:format) devise/passwords#update PUT /users/password(.:format) devise/passwords#update cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel user_registration POST /users(.:format) devise/registrations#create new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit PATCH /users(.:format) devise/registrations#update PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy
Trợ giúp
Devise cung cấp một số trợ giúp trong view và controller.trong Controller có thể setup before_action.
before_action :authenticate_user!
một số trợ giúp khác
Trợ giúp | Ý nghĩa,tác dụng |
---|---|
current_user | helper này có sẵn đối với người dùng hiện tại |
user_signed_in? | helper này dùng để xác minh người dùng đang đăng nhập. |
user_session | dùng để truy cập vào phiên giao dịch |
Bạn chạy lại rails server và vào trang đăng nhập. http://localhost:3000/users/sign_in
Trang đăng kí http://localhost:3000/users/sign_up
Đến đây về cơ bản là bạn đã cài đặt xong gem devise.Ở phần tiếp theo tôi sẽ hướng dẫn bạn làm thế nào để có thể cấu hình view và controller.
Cấu hình View
Trong file config/initializers/devise.rb bạn cần cấu hình lại
config.scoped_views = true
Bạn có thể generate ra toàn bộ view cho Devise bằng cách gõ lệnh.
rails generate devise:views
hoặc bỏ bớt đi các view không cần thiết bằng các thêm -v vào sau.
rails generate devise:views -v registrations confirmations
Cấu hình Controller
class SessionsController < Devise::SessionsController def new get_pre_login_url super end def create @referer_url = root_path super end def destroy @referer_url = root_path super end private def get_pre_login_url @referer_url = root_path end def after_sign_in_path_for resource sign_in_url = url_for(action: "new", controller: "sessions", only_path: false, protocol: "http") if @referer_url == sign_in_url super else @referer_url || root_path end end end
Bạn có thể viết các hàm create và destroy để redirect đến trang nào đó(ví dụ: home_page)
Kết luận
Devise là một gem khá mạnh về quản lí người dùng được sử dụng rộng rãi trong cộng đồng Ruby Developer.Cung cấp hầu hết các tính năng quản lí người dùng cho các hệ thống Rails.