12/08/2018, 14:00

Securing Rails api với Rails 5 và Devise Auth Token

Bài viết này mình sẽ hướng dẫn tạo và setting cơ bản cho Securing Rails apis with Rails 5 and Devise Auth Token. Rails không chỉ là sự lựa chọn hoàn hảo khi bạn muốn xây dựng một ứng dụng full-stack, mà với phiên bản 5.0, Rails còn có khả năng xây dựng ứng dụng backend trả về JSON, cắt bỏ ...

logo.jpg

Bài viết này mình sẽ hướng dẫn tạo và setting cơ bản cho Securing Rails apis with Rails 5 and Devise Auth Token.

Rails không chỉ là sự lựa chọn hoàn hảo khi bạn muốn xây dựng một ứng dụng full-stack, mà với phiên bản 5.0, Rails còn có khả năng xây dựng ứng dụng backend trả về JSON, cắt bỏ code phía client. Rails 5 giờ còn giúp cho công việc này trở nên dễ dàng hơn với -api mode

Create a new app

rails new my_api_app --api

sẽ tạo ra ứng dụng Rails để bạn làm việc với JSON, chứ không phải là HTML.

Chúng ta sẽ cài thêm các gem

 gem "omniauth"
 gem "devise_token_auth"

Cài đặt các gem vừa thêm vào ở trên bằng cách chạy lệnh: bundle install

Bây giờ, chúng ta generate User model, sử dụng token authentication.

 rails g devise_token_auth:install User auth

Các file được tạo ra:

 create  config/initializers/devise_token_auth.rb
  create  db/migrate/20161021153426_devise_token_auth_create_users.rb
  create  app/models/user.rb
  insert  app/controllers/application_controller.rb
    gsub  config/routes.rb

sau đó chạy lệnh.

rails db:migrate

Ta thêm dòng này vào trong file routes.rb

 mount_devise_token_auth_for 'User', at: 'auth'

Các bạn có thể tham khảo thêm chi tiết gem devise_token_auth

Ta sử dụng Postman để test API

Cài đặt ứng dụng Postman: https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop

Chúng ta chạy rails server.

rails s
  • Ví dụ với Sign Up

    Request_type – Post,

    Request_url - http://localhost:3000/auth

chúng ta bỏ chức năng Confirmable của user ta sẽ có kết quả như thế này:

signup.png

  • Ví dụ với Sign In

    Request_type – Post

    Request_url - http://localhost:3000/auth/sign_in.json

sign_in.png

0