Hướng dẫn cách Authenticate trong Ruby on Rails 6.0

Tram Ho

Để bắt đầu thì chúng ta cùng tạo ra một app Rails mới.

Sau đó, chúng ta sẽ cùng tạo ra model User và controller của nó. Sau đó chúng ta cần có 1 controller nữa để xử lý việc custom routes để quản lý session.

Model

Chúng ta cần tạo ra 1 model với 2 attribute là username và password.

Controller

UsersController cần có 2 action là newcreate. Và SessionsController sẽ cần có 2 action để quản lý login fail và pass là newcreate. Và chúng ta sẽ cần khai báo 4 đường dẫn đến 4 action này trong file routes.

Chúng ta cần sử dụng lệnh

Bcrypt

Trong cơ sở dữ liệu, chúng ta sẽ không lưu trữ password thuần mà chúng ta sẽ mã hóa chúng bằng Bcrypt và lưu đoạn đã mã hóa vào trong DB. Vì vậy, chúng ta sẽ thêm gem bcrypt;

Trong model User, chúng ta sẽ thêm một macro để sử dụng method Bcrypt.

Routes

Việc tiếp theo chúng ta cần làm là thêm routes trong file config/routes.rb

Giờ chúng ta cần có View để hiển thị nút Sigup và Login. Nếu user đã login thì hiển thị tên của họ.

View

Chúng ta cần thêm:

  • Nút Signup và Login khi vừa vào trang, vì thế chúng ta sẽ thêm 2 nút này vào sessions/welcome.index.erb

  • Nút Signup để chuyển hướng về new trong UsersController vì thế chúng ta sẽ thêm form signup vào users/new.html.erb.

  • Nút Login sẽ chuyển hướng về new trong SessiosController, vì thế chúng ta sẽ thêm form login vào sessions/new.html.erb.

    Form Signup

    Biến @user sẽ được định nghĩa là @user = User.new trong action new của UsersController

    Khi người sử dụng click nút “Submit”, chúng ta sẽ chuyển hướng tới action create trong UsersController.

    Đầu tiên, chúng ta tạo biến instance sau đó chuyển hướng về homepage. Sau đó thì chúng ta sẽ cần lưu user_id vào session.
    Chúng ta sẽ cần tạo một method để lưu trữ thông tin của user đang đăng nhập. Vì thế, chúng ta cần thêm 1 method trong Application Controller để đảm bảo tất cả mọi nơi đều có thể truy cập vào method này

    Ngoài ra, chúng ta cần kiểm tra xem user đã login hay chưa

    Để view có thể truy cập đc vào phương thức này, chúng ta cần sử dụng macro helper_method. Vì thế, ApplicationController của chúng ta sẽ như sau:

    khi đó,, nếu user đã login rồi, chúng ta sẽ hiển thị ra tên của user, vì vậy file sessions/welcome.html.erb

    Sau khi chúng ta đã signup thì chúng ta sẽ lưu session cho người đó. CHúng ta sẽ implement một page để login trong sessions/new.html.erb

    Sau khi submit thì Sessions sẽ chịu trách nhiệm tìm user dựa trên username

    Nếu tìm thấy user, chúng ta sẽ kiểm tra xem có trùng password không. Để làm được điều này, chúng ta sử dụng method authenticate của Bcrypt.

Authorization

Trong 1 vài page, chúng ta cần đăng nhập, nhưng 1 vài page chúng ta không. Nên chúng ta có thể sử dụng filter để kiểm tra việc login.

Khi thêm vào Application thì tất các các controller kế thừa đều sẽ cần authorized. Vì vậy, nếu controller nào không sử dụng, chúng ta có thể skip nó sử dụng method skip_before_action

Vậy là chúng ta đã cài đặt xong việc authorization cho trang web của mình rồi. 😄
Chúc các bạn thành công.
Học Ruby On Rails ở đâu hiệu quả, chỉ có thể là Awesome Academy. Tham khảo các khóa học lập trình tại Awesome Academy ở link https://awesome-academy.com/lich-khai-giang

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo