繁体   English   中英

Rail Devise创建自己的sign_in和sign_out操作

[英]Rail Devise creat own sign_in and sign_out actions

我在铁轨上潜水时遇到以下问题。

所有请求和响应均为JSON

登录/ partners / sign_in后,我得到以下响应:

HTTP / 1.1 200 OK {“成功”:true}

在我退出/ partners / sign_out之后,我得到以下响应:

HTTP / 1.1 200 OK {“成功”:true}

现在我的问题是:我如何创建自己的RegisterController,它看起来如何,是否有示例? 我已经在github / devise上搜索了,但是没有找到任何示例。

我想响应其他信息,如果身份验证失败,我想响应HTTP 404错误

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

ActionController的render方法采用以: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方法的文档。
这是Cody Fauser撰写的出色文档,内容涉及Rails状态码到符号的映射

一项观察:

在Ruby中,在函数的末尾使用return语句不是惯用的,因为最后一个表达式的返回值是函数的返回值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM