Giới thiệu Gem Devise
This post hasn't been updated for 3 years
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.
Tài liệu tham khảo
All Rights Reserved