我有同样的问题。
我的 API 的 Sessions 控制器中有一行:
warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
它正在登录用户并创建一个会话(一开始我没有注意到)
解决方案是使用与此类似的东西(在博文中找到):
@user=User.find_by_email(email.downcase)
if @user.nil?
render :status=>401, :json=>{:message=>"Invalid email or password."}
return
end
# http://rdoc.info/github/plataformatec/devise/master/Devise/Models/TokenAuthenticatable
@user.ensure_authentication_token!
if not @user.valid_password?(password)
logger.info("User #{email} failed signin, password \"#{password}\" is invalid")
render :status=>401, :json=>{:message=>"Invalid email or password."}
else
render :status=>200, :json=>{:token=>@user.authentication_token}
end
基本上不是登录用户,而是检索令牌。除注销外,应用程序的其他部分工作正常。