Giới Thiệu
Rails 8 đã chính thức ra mắt và mang đến một số tính năng thú vị, trong đó nổi bật nhất là tính năng xác thực được tích hợp sẵn mà được chính DHH (David Heinemeier Hansson) phát triển. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng tính năng xác thực này, cùng với các bước cần thực hiện để thiết lập môi trường.
Tổng Quan Về Tính Năng Xác Thực
Trong bản cập nhật này, Rails đã cung cấp một generator cho phép chúng ta dễ dàng thiết lập hệ thống xác thực cơ bản với phiên làm việc được theo dõi bằng cơ sở dữ liệu và khả năng đặt lại mật khẩu. Bạn có thể tạo xác thực bằng lệnh:
bash
bin/rails generate authentication
Khi chạy lệnh trên, hệ thống sẽ tự động sinh ra các file cần thiết cho chức năng xác thực, bao gồm các model, controller, view và migration.
Thiết Lập Dự Án Rails 8
Để bắt đầu, trước tiên bạn cần tạo một dự án Rails 8 mới. Bạn có thể sử dụng RubyMine, một IDE tuyệt vời cho Ruby, để khởi tạo mà không cần sử dụng terminal. Chỉ cần:
- Mở RubyMine.
- Chọn "File" > "New" > "Project".
- Nhập tên dự án, đường dẫn, chọn phiên bản Ruby và Rails, cũng như loại database bạn muốn sử dụng.
- Chọn importmap cho JavaScript hoặc một số tùy chọn khác tùy theo nhu cầu của bạn.
Hãy chắc chắn đưa thư mục .idea
vào file .gitignore
để giữ cho repository của bạn sạch sẽ.
Cấu Trúc File Được Tạo Ra
Khi chạy lệnh sinh ra xác thực, các file sau sẽ được tạo:
app/models/current.rb
app/models/user.rb
app/models/session.rb
app/controllers/sessions_controller.rb
app/controllers/passwords_controller.rb
app/mailers/passwords_mailer.rb
app/views/sessions/new.html.erb
app/views/passwords/new.html.erb
app/views/passwords/edit.html.erb
app/views/passwords_mailer/reset.html.erb
app/views/passwords_mailer/reset.text.erb
db/migrate/xxxxxxx_create_users.rb
db/migrate/xxxxxxx_create_sessions.rb
test/mailers/previews/passwords_mailer_preview.rb
Phân Tích Cấu Trúc Xác Thực
Models & Migrations
Chúng ta có 3 model được sinh ra như sau:
User
: bao gồm trườngemail_address
là duy nhất vàpassword_digest
để lưu trữ mật khẩu.Session
: chứa trườngtoken
,ip_address
, vàuser_agent
để ghi lại thông tin phiên làm việc.Current
: giúp quản lý trạng thái người dùng hiện tại.
Gem bcrypt
sẽ được sử dụng để mã hóa mật khẩu.
Logic Xác Thực
Tất cả logic liên quan đến xác thực đều được đưa vào phần Authentication concern:
require_authentication
: xác minh phiên làm việc.resume_session
: khôi phục phiên làm việc từ cookie.authenticated?
: kiểm tra trạng thái xác thực của người dùng.start_new_session_for(user)
: khởi tạo phiên làm việc mới cho người dùng.terminate_session
: hủy phiên làm việc hiện tại.
Controller
Để tích hợp xác thực vào ứng dụng, trong ApplicationController
, bạn cần thêm:
ruby
include Authentication
Còn trong các controller khác, bạn có thể sử dụng các callback tương ứng như require_authentication
để kiểm soát những gì cần xác thực.
Hạn Chế Hiện Tại
Hiện tại, tính năng xác thực này đã hoạt động tốt nhưng chưa bao gồm chức năng đăng ký người dùng mới. Bạn có thể cần tạo các route như sau:
ruby
resource :session
resources :passwords, param: :token
Để tạo link đăng ký, bạn có thể cần tùy chỉnh lại route cho phù hợp.
Kết Luận
Tính năng xác thực mới trong Rails 8 hứa hẹn sẽ là lựa chọn thay thế cho các gems xác thực hiện tại như Devise. Dù vẫn cần phát triển thêm, nhưng đây là bước tiến lớn giúp các lập trình viên thuận tiện hơn trong việc xây dựng ứng dụng.
Chúng ta hãy cùng chờ đợi các bản cập nhật tiếp theo để xem tính năng này sẽ phát triển ra sao.
source: viblo