我们一直看到越来越多的错误与同一个呼叫视线:
NameError: undefined local variable or method 'request' for :false:Symbol
他们都来自位于lib
的身份验证帮助程序。这种方法在99%的时间内成功运行(我们知道因为它会毫无问题地将您登录)。但是,对于极少数的请求,找不到request
对象,如错误消息所示。
我们已经为各种用户代理看到了这一点。对于它的价值,ApplicationController
包括(通过include
)有问题的助手。
在Rails请求期间,是否存在request
可能丢失的常见调试技术或已知问题?如果有帮助,cookies
也会出现同样的情况。
相关的代码:
# lib/authenticated_system.rb
module AuthenticatedSystem
def logged_in?
current_user != :false
end
def current_user
@current_user ||= login_via_cookie || login_via_url || :false
@current_user
end
def login_via_cookie
Rails.logger.info "IP: #{request.ip}" # example of accessing request
if token = cookies[:web_token]
User.find_by(auth_token: token)
end
end
def login_via_url
# return User or nil
end
end
# app/controllers//foo_controller.rb
class FooController < ApplicationController
include Alerting
def show
log_alert(current_user)
end
end
# lib/alerting.rb
module Alerting
def log_alert(user)
Rails.logger.info "User: #{user.id}" # example of accessing user
end
end
答案 0 :(得分:1)
此代码不正确...
@current_user ||= login_via_cookie || login_via_url || :false
将@current_user设置为符号:false
最好将其设置为对象false
或更好,让它默认为nil
@current_user ||= (login_via_cookie || login_via_url)
并将logged_in?
更改为...
def logged_in?
!!current_user
end
在你的一个lib模块的某个时刻,我怀疑你正在调用导致问题的current_user.request
。