我正在使用rails 5.如何使我的confnig/doutes.rb文件识别我在辅助模块中定义的函数?在我的app/helpers/sessions_helper.rb文件中,我有
# Returns true if the user is logged in, false otherwise.
def logged_in?
!current_user.nil?
end
,然后在我的config/doutes.rb文件中我有
get '/', to: 'users#show', constraints: lambda { |request| SessionsHelper.logged_in? }
但是,加载我的应用程序后,我会收到错误
undefined method `logged_in?' for SessionsHelper:Module
从我的模块调用辅助方法的正确方法是什么?
您无法执行此操作,您不应该这样做。您的路由文件没有存储当前用户授权的会话概念,由您的控制器在之后提供了一个路由,并且已选择了正确的控制器。无论如何,授权不属于您的路线文件中的约束。
如果您的current_user
未设置为预期值,则您的控制器应负责渲染422"未经授权"。在before_action
回调中执行此操作。
class UsersController < ApplicationController
before_action :require_login
# ...
protected
def require_login
redirect_to login_path unless current_user
end
end
通常,您通常将require_login
功能和before_action
回调放在ApplicationController
中,然后选择性地,不需要使用skip_before_action
进行身份验证的白名单控制器。许多宝石已经存在,可以提供此确切的设置,并具有大量的额外功能。例如,请参见设计。
您是否使用设计?如果是,那么您应该这样做:
authenticated
get '/', to: 'users#show'
end
设计代码中的更多详细信息:https://github.com/plataformatec/devise/blob/master/lib/lib/devise/rails/rails/ROUTES.RB#L294