2

一个页面如何呈现一个显示“感谢访问我们”的“/logout”页面,然后如果用户重新加载浏览器,它将加载“/”?

我有一个

match "/logout" => "home#logout"

但是不要让任何请求“/logout”的人看到这个页面,它应该只在用户签名后直接呈现。

解决此问题的最佳方法是使用条件重定向(到 root_path)而不是使用 redirect_to 来渲染依赖于视图

4

1 回答 1

3

你可能想要:

match '/logout' => 'sessions#destroy', :via => :delete

logout_path在您的link_to助手中使用,或者您决定在应用程序中实现注销。

并在闪存中写下您的信息SessionsController#destroy。它可能看起来像:

class SessionsController < ApplicationController
  def destroy
    sign_out # or whatever you named your method for signing out
    flash[:notice] = "Thanks for visiting us"
    redirect_to root_path
  end
end

为了确保在root_path用户未登录时发出请求,您应该放置一个before_filterin ApplicationController

class ApplicationController < ActionController::Base
  before_filter :authenticate_user

  def authenticate_user
    unless signed_in?
      redirect_to root_path
    end
  end
  helper_method :authenticate_user
end

这样,用户退出后,所有请求都会重定向到root_path.

要允许在未登录的情况下请求页面,请skip_before_filter在适当的控制器类中使用:

def MyPublicStuffsController < ApplicationController
  skip_before_filter :authenticate_user
  # ...
end
于 2013-06-03T16:09:38.440 回答