一个页面如何呈现一个显示“感谢访问我们”的“/logout”页面,然后如果用户重新加载浏览器,它将加载“/”?
我有一个
match "/logout" => "home#logout"
但是不要让任何请求“/logout”的人看到这个页面,它应该只在用户签名后直接呈现。
解决此问题的最佳方法是使用条件重定向(到 root_path)而不是使用 redirect_to 来渲染依赖于视图
一个页面如何呈现一个显示“感谢访问我们”的“/logout”页面,然后如果用户重新加载浏览器,它将加载“/”?
我有一个
match "/logout" => "home#logout"
但是不要让任何请求“/logout”的人看到这个页面,它应该只在用户签名后直接呈现。
解决此问题的最佳方法是使用条件重定向(到 root_path)而不是使用 redirect_to 来渲染依赖于视图
你可能想要:
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_filter
in 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