0

Devise を使用していて、ログアウト アクションを実行したいと考えています。

私がやりたいことは、ログアウトするときに、返す独自の JSON オブジェクトを作成したいということです。この時点で、ログアウトした後、すべてのルート記事を取得します。

create アクションを見つけたように、どうすれば独自の destory アクションを作成できますか?

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

これは、セッション コントローラーの destroy メソッドです。

必要に応じてカスタマイズできるはずです。別のアクションを追加してそこにカスタム動作を実装する方が賢明だと思います。これにより、将来のデバイスのアップグレードで予期しないエラーが発生する可能性が低くなります。

  # 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 に答える