Ruby on rails 仅限登录用户访问Rails应用程序
我正在学习Rails,我试图在用户未登录时限制对页面的访问,并且只允许他们查看登录和注册页面 目前,我的代码在用户登录时创建会话,在用户注销时清除会话。我有一个会话助手,这样我可以检查用户是否已登录,但如果用户未登录,我不确定如何在整个应用程序中重定向该用户 更新:Ruby on rails 仅限登录用户访问Rails应用程序,ruby-on-rails,Ruby On Rails,我正在学习Rails,我试图在用户未登录时限制对页面的访问,并且只允许他们查看登录和注册页面 目前,我的代码在用户登录时创建会话,在用户注销时清除会话。我有一个会话助手,这样我可以检查用户是否已登录,但如果用户未登录,我不确定如何在整个应用程序中重定向该用户 更新: 当我发布这个问题时,我设法找到了一个before_过滤器。我应该使用before\u操作还是before\u过滤器 我是否需要在所有要限制访问的控制器中复制相同的方法 代码: /控制器/应用程序\u controller.rb cl
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
include SessionsHelper
end
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out
redirect_to root_url
end
end
您可以在执行操作之前使用
。rails指南有一个很好的例子:
class ApplicationController < ActionController::Base
before_action :require_login
private
def require_login
unless logged_in?
flash[:error] = "You must be logged in to access this section"
redirect_to new_login_url # halts request cycle
end
end
end
class ApplicationController
当我发布问题时,我设法找到了一些可以使用before\u过滤器的东西。我应该使用before\u操作还是before\u过滤器?另外,我是否可以避免在我的所有控制器中复制相同的方法?@Bhav-Use-before\u-action,before\u-filter被弃用,并将在Rails 5.1中删除(请参阅此答案:)。我相信,如果您在ApplicationController中定义require\u login
和之后才执行操作:require\u login
,并且您的所有控制器都继承自它,那么默认情况下它将被启用,因此您无需复制任何内容。您可以使用skip\u before\u action
在适当的情况下将其关闭。@emil.p.stanchev很抱歉,这太旧了,但使用此方法,我将错误重定向给您太多次。
class ApplicationController < ActionController::Base
before_action :require_login
private
def require_login
unless logged_in?
flash[:error] = "You must be logged in to access this section"
redirect_to new_login_url # halts request cycle
end
end
end