【发布时间】:2014-08-12 22:19:36
【问题描述】:
由于某种原因,在我的网站上使用了一段时间后,我的会话哈希变成了一个字符串
undefined method `admin?' for "#<Visitor:0x000001071b7800>":String
是我在 render_layout 方法中得到的结果
def render_layout
if session[:visitor].admin?
render layout: 'admin'
else
render layout: 'application'
end
end
另外两次我调用或使用 session[:visitor] 是在我的 authenticate 方法和我用来跳过 authenticate 的 logged_in? 方法中
def authenticate
uuid = params[:uuid]
@visitor ||= uuid && Visitor.find_by_uuid(uuid)
if !@visitor
authenticate_or_request_with_http_basic do |login, password|
@visitor = Visitor.find_by_uuid(ENV['ADMIN_UUID']) if login == 'test' && password == 'testpw'
end
session[:visitor] = @visitor
else
session[:visitor] = @visitor
end
end
def logged_in?
!!session[:visitor]
end
为什么会变成字符串?我在 atom 中使用了项目搜索,但我只在那些地方调用过它。
编辑:
我在我调用 session[:visitor] 的 4 个位置添加了一个binding.pry,它在所有内容中都第一次起作用。当我第一次关注一个 url 并且
before_action :authenticate, unless: :logged_in?
第二次调用session[:visitor] 变成一个字符串
#=> "#<Visitor:0x00000106851bd0>"
【问题讨论】:
标签: ruby-on-rails session authentication