0

我正在使用模块化 Sinatra,这些代码

def is_login?
   session[:auth_token].nil? # error: undefined variable or method `session` 
end

if is_login?
   menu['Logout'] = '/logout'
else 
   menu['Login'] = '/login'
end

get '/logout' do
   session[:auth_token] = nil
end

那些代码返回一个错误undefined local variable or method 'session' for main:Object,因为会话只适用于内部get,如何使会话哈希可以从外部访问?

我尝试了另一种选择,即is_login?进入 helper 并作为define_method它可以访问session,但是出现了类似的问题,我无法调用is_login?它,因为它没有定义,这里是代码:

helpers do
  define_method :logged_in? do
    session[:access_token].nil?
  end
  if is_login? # error: undefined method `logged_in?`
    menus['Logout'] = '/logout'
  else
    menus['Login'] = '/login'
  end
end
4

1 回答 1

1

会话仅在请求的上下文中才有意义。因此,在外部使用它(例如在您上面给出的 if 表达式中)将不会成功。

相反,在请求中使用它。例如

get '/' do
  if is_login?
    # your code
  else
    # your code
  end
end
于 2013-08-11T20:21:28.570 回答