我在铁轨潜水时遇到以下问题。
所有请求和响应均为JSON
登录 / partners / sign_in 后,我收到以下回复:
HTTP / 1.1 200好的 { “成功”:真}
在我退出 / partners / sign_out 后,我得到以下回复:
HTTP / 1.1 200好的 { “成功”:真}
现在我的问题: 我怎样才能创建自己的RegisterController以及它看起来如何,是否有任何示例?我在github / devise上搜索过但没找到任何例子。
我想回复其他内容,如果身份验证失败,我想响应HTTP 404 ERROR
的routes.rb
devise_for :partners, :controllers => { :sessions => "sessions" }
session_controller.rb
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
return sign_in_and_redirect(resource_name, resource)
end
def destroy
redirect_path = after_sign_out_path_for(resource_name)
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
set_flash_message :notice, :signed_out if signed_out
respond_to do |format|
format.html { redirect_to redirect_path }
format.json { render :json => {:success => true} }
end
end
private
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true}
end
def failure
return render:json => {:success => false, :errors => ["Login failed."]}
end
end
答案 0 :(得分:1)
ActionController的render方法采用hash:status作为键。您可以在此处指定HTTP错误状态代码或该状态代码的符号:
render json: {success: false, errors: ["Login Failed"]}, status: 404
# or the following is a preferred way
render json: {success: false, errors: ["Login Failed"]}, status: :not_found
这里是render method的文档 以下是rails status code to symbol mapping
的Cody Fauser的优秀文档一个观察:
在Ruby中使用函数末尾的return语句并不是惯用的,因为最后一个表达式的返回值是函数的返回值。