Sinatra的多会话支持

时间:2015-02-05 09:12:38

标签: ruby session sinatra

我有一个(非常)基本的Sinatra程序可以做到这一点:

get '/loginbasic' do
   erb :login_basic
end #get /loginbasic


post '/generatetoken' do
  @@username = params[:username]
  @@password = params[:password]
  @@token = function(@@username, @@password)
end #post /generatetoken


get '/token' do
  erb :token, :locals => {'username' => @@username, 'serviceroot' =>  @@serviceroot, 'token' => @@token}
end #/token

非常直截了当。

我要求输入用户名和密码(/ loginbasic) loginbasic发布到/ generatetoken然后生成一个令牌(带有函数) 然后,用户可以指向/ token来读取其令牌。

工作正常。

问题在于它是单个会话,从某种意义上说,如果我从另一台笔记本电脑指向/ token,它会显示输入id / password并生成令牌的用户令牌。

似乎Sinatra支持多会话(http://www.sinatrarb.com/faq.html#sessions),但我不确定如何从代码角度实现这一点。我想要做的是,如果用户连接到/ token并且他/她没有生成令牌,他/她会得到一个错误(或者更好,但它被重定向到/ loginbasic)。

我怎样才能提升我的代码来实现这一目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

我能够以这种方式调整代码,它似乎正在起作用:

get '/loginbasic' do
  erb :login_basic
end #get /loginbasic


post '/generatetoken' do
  session[:@@username] = params[:username]
  session[:@@password] = params[:password]
  session[:@@token] = function(session[:@@username], session[:@@password])
end #post /generatetoken


get '/token' do
  erb :token, :locals => {'username' => session[:@@username], 'serviceroot' => @@serviceroot, 'token' => session[:@@token]}
end #/token