我正在覆盖设备会话控制器 ...它可以正常工作(我可以使用json登录),但我无法让它在错误时重定向到另一个操作:
class Users::SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#no")
return invalid_login_attempt unless resource
sign_in(resource_name, resource)
#respond_with resource, :location => redirect_location(resource_name, resource)
respond_to do |format|
format.json { render :status => 200, :json => { :success => true, :auth_token => resource.authentication_token, :user => resource } }
end
end
def no
puts "NO!"
return render:json => {:success => false, :errors => alert}
end
end
我也尝试过:
if resource.nil?
puts "NIL!"
end
我总是得到相同的默认Devise json错误以响应错误的sign_in凭据:
{error: "You need to sign in or sign up before continuing."}
我做错了什么?
答案 0 :(得分:2)
请记住,如果warden没有让用户通过身份验证!动作它会向失败应用程序抛出一个符号。因此,在失败的情况下,该行之后的任何内容都无关紧要。
将authenticate!
更改为authenticate
,它会返回用户对象,供您根据需要进行处理。
检查warden gem中的proxy.rb文件以获取更多详细信息。 Documentation
答案 1 :(得分:1)
根据这个类似的主题(Extending Devise SessionsController to authenticate using JSON),您需要做的就是包含以下代码:
# config/initializers/devise.rb
config.navigational_formats = [:"*/*", "*/*", :html, :json]