我正在使用Rails 5.如何让我的confnig / routes.rb文件识别我在辅助模块中定义的函数?在我的app / helpers / sessions_helper.rb文件中我有
# Returns true if the user is logged in, false otherwise.
def logged_in?
!current_user.nil?
end
然后在我的config / routes.rb文件中
get '/', to: 'users#show', constraints: lambda { |request| SessionsHelper.logged_in? }
但是在加载我的应用程序时,我收到了错误
undefined method `logged_in?' for SessionsHelper:Module
从我的模块调用辅助方法的正确方法是什么?
答案 0 :(得分:3)
你不能这样做,你不应该这样做。您的路线文件没有存储当前用户授权的会话概念,您的控制器在选择了路径后提供了正确的控制器实例化。无论如何,授权都不属于您的路径文件中作为约束。
您的控制器应负责呈现422"未经授权的"如果您的current_user
未设置为预期值。在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
身份验证的控制器列入白名单。已经存在许多提供这种精确设置的宝石,具有大量额外功能。例如,请参阅Devise。
答案 1 :(得分:0)
你使用Devise吗?如果是,那么你应该这样做:
authenticated
get '/', to: 'users#show'
end
Devise代码中的更多详细信息:https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb#L294