確認環境
$ bundle exec ruby --version
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-darwin19]
$ bundle exec rails --version
Rails 6.0.4.6
トークンの準備
$ rails g model MyToken token:string
$ rake db:migrate
$ rails c
Loading development environment (Rails 6.0.4.6)
irb(main):001:0> MyToken.create(token: 'mytokennnn')
トークン認証の処理
$ rails g controller MyApi
config/routes.rb
Rails.application.routes.draw do
get "/myapi/users" => "my_api#users"
end
app/controllers/my_api_controller.rb
class MyApiController < ApplicationController
include ActionController::HttpAuthentication::Token::ControllerMethods
before_action :authenticate
def users
# SampleUser は返却したいデータに置き換えてください
# 動作確認のため、固定値を返すようにしてもいいです。
# render json: { data: '固定データ' }
render json: { data: SampleUser.all }
end
def authenticate
authenticate_or_request_with_http_token do |token, options|
Rails.logger.fatal(token)
Rails.logger.fatal(options)
auth_user = MyToken.find_by(token: token)
auth_user.present?
end
end
end
curl で確認
正しいトークン
$ curl -X GET -H 'Authorization: Token mytokennnn' http://localhost:3000/myapi/users
{"data":[{"id":1,"name":"new name","created_at":"2022-08-24T15:34:58.690Z","updated_at":"2022-08-27T06:18:46.114Z"}]}
間違っているトークン
$ curl -X GET -H 'Authorization: Token wrongMytokennnn' http://localhost:3000/myapi/users
HTTP Token: Access denied.