Deviseとauthenticatable_tokenを使用してRailsアプリにログインするためのAPIを構築しようとしています。API モジュールで SessionsController を作成し、次のコードを sign_in に記述しました。
module Api
module V1
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(scope: resource_name, recall: "#{controller_path}#new")
sign_in(resource_name, resource)
if current_user
if !current_user.authentication_token
current_user.reset_authentication_token!
end
render json: {success: true, auth_token: resource.authentication_token, email: resource.email}
else
invalid_login_attempt
end
end
protected
def invalid_login_attempt
warden.custom_failure!
render json: {success: false, message: "Error with your login or password"}, status: 401
end
end
end
end
問題は、トークンなしでログインを使用すると、アプリが 401 を発生させることです。
RestClient.post "http://localhost:3000/api/v1/users/sign_in", {user: {email: "tester@test.biz", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
しかし、サインアップ メソッドによって提供されたトークンを設定すると、次のように動作します。
response_json = RestClient.post "http://localhost:3000/api/v1/users/sign_in?auth_token=#{@token}", {user: {email: "tester@test.biz", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
では、なぜこれが?サインイン時にトークン認証プロセスを無効にすることはできますか?