【问题标题】:Multisession support in SinatraSinatra 中的多会话支持
【发布时间】:2015-02-07 00:09:15
【问题描述】:

我有一个(非常)基本的 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 / 密码并生成令牌的用户的令牌。

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

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

谢谢!

【问题讨论】:

  • 看看 Sinatra 的食谱。那里有一篇关于身份验证的文章:recipes.sinatrarb.com/p/middleware/…
  • 谢谢@w0lf。我不确定我是否能够访问该链接。我什至不确定他是否正在尝试做我想做的事情(也许他是)。我的一位同事向我指出了另一篇文章(我在谷歌上搜索失败),其中有足够的内容让我可以按照我需要的方式调整代码:gist.github.com/amscotti/1384524

标签: ruby session sinatra


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多