0

我使用设计,我想做我的注销操作。

我想做的是,当我注销时,我想创建一个自己的 JSON 对象来返回。这时候,在我登出后,我得到了我所有的根文章。

我如何编写自己的破坏动作,就像我找到了创建动作一样?

class SessionsController < Devise::SessionsController

  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
    return sign_in_and_redirect(resource_name, resource)
  end

  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, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
  end

  def failure
    return render:json => {:success => false, :errors => ["Login failed."]}
  end

end

还有我在 routes.rb 中的路线

  devise_for :users, :controllers => {:session => "sessions"} do
    get "/users/sing_out" => "devise/sessions#destroy"
  end
4

1 回答 1

0

这是会话控制器的销毁方法。

您应该能够根据您的需要对其进行自定义。我认为添加另一个操作并在那里实现您的自定义行为会更明智,因为这不太可能在未来升级设计时导致意外错误。

  # DELETE /resource/sign_out
  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

    # We actually need to hardcode this as Rails default responder doesn't
    # support returning empty response on GET request
    respond_to do |format|
      format.any(*navigational_formats) { redirect_to redirect_path }
      format.all do
        method = "to_#{request_format}"
        text = {}.respond_to?(method) ? {}.send(method) : ""
        render :text => text, :status => :ok
      end
    end
  end
于 2012-04-10T20:34:17.550 回答