実現したいこと
RailsとDeviseとDeviseTokenAuthを利用してWebとiOSアプリを開発しております。(RailsはAPIモードではありません。)
- header情報から、access_token、client、uidを取得したい
前提
Railsを利用してWebとiOSアプリを開発しております。(RailsはAPIモードではありません。)
DeviseとDeviseTokenAuthを導入して認証周りを実装しております。導入までは問題なく進みました。
しかし、header情報は取得できるのですが、access_token、client、uidがheader情報から取得できないため、質問させて頂きました。
全体のソースコードは以下のようになります。
Gemfile
1gem 'devise' 2gem 'devise_token_auth' 3gem 'rack-cors'
routes.rb
1namespace :api, default: { format: :json } do 2 namespace 'v1' do 3 mount_devise_token_auth_for 'User', at: 'auth', controllers: { 4 registrations: "api/v1/auth/registrations", 5 sessions: "api/v1/auth/sessions"} 6 end 7end
config/initializers/cors.rb
1Rails.application.config.middleware.insert_before 0, Rack::Cors do 2 allow do 3 origins 'localhost:3000' 4 resource '/api/v1/*', 5 headers: :any, 6 expose: ['access-token', 'uid', 'client', 'expiry', 'token-type', 'authorization'], 7 methods: [:get, :post, :put, :patch, :delete, :options, :head] 8 end 9end
config/initializers/devise_token_auth.rb
1DeviseTokenAuth.setup do |config| 2 3 config.change_headers_on_each_request = false 4 config.enable_standard_devise_support = true 5 config.token_lifespan = 2.weeks 6 config.token_cost = Rails.env.test? ? 4 : 10 7 config.headers_names = {:'access-token' => 'access-token', 8 :'client' => 'client', 9 :'expiry' => 'expiry', 10 :'uid' => 'uid', 11 :'token-type' => 'token-type', 12 :'authorization' => 'authorization' } 13 14end
Models/user.rb
1class User < ApplicationRecord 2 devise :database_authenticatable, :registerable, 3 :recoverable, :rememberable, :validatable 4 include DeviseTokenAuth::Concerns::User 5 6end
application_controller.rb
1class ApplicationController < ActionController::Base 2 protect_from_forgery with: :null_session, if: -> { request.format.json? } 3end
app/controllers/api/v1/application_controller.rb
1class Api::V1::ApplicationController < ActionController::API 2 include DeviseTokenAuth::Concerns::SetUserByToken 3 protect_from_forgery with: :null_session 4end
app/controllers/api/v1/auth/registrations_controller.rb
1class Api::V1::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController 2 3 def create 4 resource = build_resource 5 if @resource.save 6 user = User.find_by(email: resource.downcase) 7 render json: { status: 'ok', current_user: current_api_v1_user }. # current_userは取得できる 8 sign_in(user) 9 else 10 render json: { status: 'ng' } 11 end 12 13 private 14 15 def sign_up_params 16 params.require(:registration).permit(:name, :email, :password) 17 end 18end
app/controllers/api/v1/auth/sessions_controller.rb
1class Api::V1::Auth::SessionsController < DeviseTokenAuth::SessionsController 2 def create 3 render json: { status: 'SUCCESS LOGIN', current_user: current_api_v1_user } # current_userはnilになる 4 end
試したこと
コマンドラインでcurlでsign_inするPOSTリクエストを実行しても、リクエストは200 OKとなりますが、access_token、client、uidがheader情報から取得できません。
terminal
1% curl localhost:3000/api/v1/auth/sign_in -X POST -H 'Content-Type: application/json' -d '{"email": "test@example.com","password": "password"}' -i 2HTTP/1.1 200 OK 3X-Frame-Options: SAMEORIGIN 4X-XSS-Protection: 1; mode=block 5X-Content-Type-Options: nosniff 6X-Download-Options: noopen 7X-Permitted-Cross-Domain-Policies: none 8Referrer-Policy: strict-origin-when-cross-origin 9Content-Type: application/json; charset=utf-8 10ETag: W/"dbd384a8d3826bdb8dbc19bf88dd6585" 11Cache-Control: max-age=0, private, must-revalidate 12X-Rack-Dev-Mark-Env: development 13X-Request-Id: 5ec3438d-a6dd-435d-a601-3b9b4ab1855d 14X-Runtime: 0.439754 15Transfer-Encoding: chunked
以上となります。アドバイスなど何卒よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Rails(5.2.8)、ruby(2.6.0)になります。
回答1件
あなたの回答
tips
プレビュー