Xác thực người dùng là một tính năng bảo mật cần thiết cho các ứng dụng web, đặc biệt là những ứng dụng xử lý dữ liệu nhạy cảm của người dùng hoặc cung cấp quyền truy cập hạn chế vào một số chức năng nhất định. Bằng cách yêu cầu người dùng tự xác thực trước khi truy cập ứng dụng, nhà phát triển có thể đảm bảo rằng chỉ những người dùng được ủy quyền mới có thể xem hoặc sửa đổi dữ liệu và chức năng của ứng dụng.
Devise là một Ruby Gem cung cấp các tính năng xác thực và ủy quyền người dùng cho các ứng dụng Rails. Nó làm giảm quá trình thêm chức năng đăng ký, đăng nhập và đăng xuất vào ứng dụng của bạn mà không phải viết mọi thứ từ đầu.
Nó có các tính năng tích hợp như đặt lại mật khẩu và xác nhận tài khoản. Nó hỗ trợ các chiến lược xác thực khác nhau như email và mật khẩu, OAuth, OpenID, v.v.
Devise có tài liệu chi tiết bao gồm cả các tính năng cơ bản và nâng cao.
Trong hướng dẫn này, chúng ta sẽ xây dựng một ứng dụng đường ray đơn giản với Devise cho phép người dùng tạo tài khoản, đăng nhập và đăng xuất khỏi tài khoản của họ. Chúng tôi cũng sẽ giới thiệu cách thêm kiểu cho ứng dụng bằng Bootstrap.
Trước khi bắt đầu hướng dẫn này, bạn nên hiểu rõ về những điều cơ bản của Ruby và Rails. Ngoài ra, bạn phải cài đặt phần mềm sau trên máy tính của mình:
Chúng tôi cũng sẽ giới thiệu cách sử dụng Bootstrap trong Rails 7 ở phần sau của hướng dẫn.
rails new authApp
Điều này sẽ tạo ra một ứng dụng Rails mới gọi là authApp
trong thư mục authApp
. Mở thư mục này trong trình soạn thảo văn bản ưa thích của bạn.
cd authApp
rails server
Tạo bộ điều khiển mới sẽ xử lý yêu cầu đến đường dẫn gốc bằng cách sử dụng lệnh: $rails generate controller home index
Điều này tạo ra một bộ điều khiển mới có tên `Home` với một hành động `index`.
Thêm đường dẫn gốc vào tệp routes.rb
trong thư mục 'config' bằng cách thêm dòng sau: root 'home#index'
Trong thư mục app/views/home
, bạn sẽ tìm thấy một tệp mới có tên index.html.erb
. Chế độ xem này sẽ chứa mã HTML cho trang đích của bạn.
Khởi động lại máy chủ và kiểm tra máy chủ cục bộ trong trình duyệt web của bạn để xem trang đích mới tạo của bạn.
cat config/importmap.rb
. Nếu không, hãy chạy rails importmap:install
$ bin/importmap pin bootstrap
. Điều này thêm JS, bootstrap và popperjs vào config/importmap.rb
.app/javascript/application.js
bằng cách sử dụng import 'bootstrap';
.gem 'bootstrap', '~> 5.1.3'
vào Gemfile của bạn và chạy bundle install
.app/assets/stylesheets/application.css
, nhập Bootstrap bằng cách sử dụng @import "bootstrap";
và đổi tên tệp thành application.scss
.app/views/layouts/application.html.erb
của bạn chứa: <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_importmap_tags %>
app/views/home/index.html.rb
của bạn.
Điều hướng đến Gemfile và thêm đá quý Devise bằng lệnh:
gem 'devise', github: 'heartcombo/devise', branch: 'main'
Chạy bundle install
để cài đặt Devise.
Chạy rails g devise:install
để thiết lập Devise trong dự án của bạn. Điều này tạo ra một số tệp khởi động cho Devise và cung cấp hướng dẫn trong thiết bị đầu cuối.
Bỏ ghi chú dòng config.navigational_formats = ['*/*', :html, :turbo_stream]
trong tệp devise.rb
. Thao tác này thêm turbo_stream dưới dạng định dạng điều hướng, cần thiết để Devise 4.9.2 hoạt động với Rails 7. Không làm được điều này sẽ dẫn đến lỗi undefined method user_url
.
Mở app/layouts/applications.html.erb
và thêm các dòng sau để thông báo và cảnh báo:
<p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p>
Để tạo mô hình người dùng với Devise, hãy chạy rails g devise user
trong terminal. Điều này sẽ tạo ra các tệp và cấu hình cần thiết để triển khai xác thực người dùng.
Tạo bảng người dùng bằng cách chạy lệnh di chuyển: rails db:migrate
.
Khởi động lại máy chủ để tải tệp khởi tạo Devise mới và thiết lập mọi thứ để xác thực người dùng hoạt động.
Truy cập http://localhost:3000/users/sign_up
trong trình duyệt của bạn để truy cập biểu mẫu đăng ký để tạo tài khoản bằng cách nhập email và mật khẩu.
Điều hướng đến tệp index.html.erb
và thêm các dòng mã sau:
<% if user_signed_in? %> <p>Welcome, <%= current_user.email %>!</p> <%= link_to "Sign out", destroy_user_session_path, method: :delete %> <% else %> <%= link_to "Sign in", new_user_session_path %> <% end %>
Những dòng này tạo liên kết đăng ký, đăng nhập và đăng xuất cho ứng dụng của bạn. user_signed_in
là một phương thức trợ giúp do Devise cung cấp, phương thức này trả về true nếu người dùng hiện tại đã đăng nhập và trả về false nếu ngược lại.
Để xem lại các thay đổi, chỉ cần làm mới trang trong trình duyệt của bạn. Nếu bạn chưa đăng nhập, sẽ có một nút đăng nhập hiển thị trên màn hình. Nhấp vào nó và hoàn tất quá trình đăng ký. Khi bạn đã đăng ký thành công, bạn sẽ được chuyển đến trang đích nơi bạn có thể xem địa chỉ email của người dùng hiện đã đăng nhập, thông báo chào mừng và nút đăng xuất.
Bằng cách làm theo các bước này, bạn đã tích hợp thành công Devise gem và thiết lập xác thực người dùng cho ứng dụng của mình.
Trong hướng dẫn này, chúng tôi đã sử dụng Devise để thêm xác thực người dùng vào ứng dụng Rails của mình. Chúng tôi đã phát triển một ứng dụng nơi người dùng có thể tạo tài khoản, đăng ký và đăng xuất. Chúng tôi cũng đã tích hợp Bootstrap để cải thiện giao diện của dự án. Để mở rộng kiến thức của bạn về Devise và khám phá các phương pháp và trình trợ giúp khác, hãy tham khảo tệp README trên kho lưu trữ Devise GitHub.