5
我正在嘗試使用Devise和authenticatable_token構建API以登錄到我的Rails應用程序。 我在API模塊創建一個SessionsController寫下了下面的代碼sign_in:用Devise和token_authenticatable登錄Rails應用程序:「401未經授權」
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: "[email protected]", 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: "[email protected]", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
那麼,爲什麼呢?執行登錄時是否可以禁用令牌認證過程?
感謝您的回答。我遵循你網站上的指示,但我仍然得到一個401.此外,我得到了一個錯誤'未定義的方法'拆分'的500:失敗:'resource = warden.authenticate!(:scope => resource_name, :召回=>:失敗)'。我也刪除了內容類型並接受了我的請求中的指令並添加了navigational_formats。 – obo
其實它是'warden.authenticate!',提高了401. – obo
我終於成功了。我的錯誤是由錯誤的路線引起的。我不得不使用localhost:3000/api/v1/sign_in而不是api/v1/users/sign_in。順便說一句,你的鏈接和你的建議在配置中幫助我使事情正常工作。 – obo