Ruby 使用Sinatra的Facebook画布身份验证:签名Cookie(带框架)
我想创建一个安全的cookie,并用我的Facebook应用程序的秘密进行签名,这个秘密只有我知道 我已经实现了一个 这是可行的,但现在,我想向客户端发送一个使用相同签名过程的cookie 我在浏览,它似乎提供了这个功能 然而,我想知道在西纳特拉如何做到这一点。看起来Ruby 使用Sinatra的Facebook画布身份验证:签名Cookie(带框架),ruby,facebook,sinatra,rack,session-cookies,Ruby,Facebook,Sinatra,Rack,Session Cookies,我想创建一个安全的cookie,并用我的Facebook应用程序的秘密进行签名,这个秘密只有我知道 我已经实现了一个 这是可行的,但现在,我想向客户端发送一个使用相同签名过程的cookie 我在浏览,它似乎提供了这个功能 然而,我想知道在西纳特拉如何做到这一点。看起来set\u cookie是一个包装器,似乎不接受秘密。所以,我想我必须用Rack来做。我试试看,然后回来汇报 同时,该公司表示,它提供了基于会话的cookie 那么,设置cookie之间的区别是什么: set_cookie("u",
set\u cookie
是一个包装器,似乎不接受秘密。所以,我想我必须用Rack来做。我试试看,然后回来汇报
同时,该公司表示,它提供了基于会话的cookie
那么,设置cookie之间的区别是什么:
set_cookie("u", 123)
或设置会话变量:
session["u"] = 123
我发现自己在翻阅Sinatra&Rack的源代码。我有个主意。我认为除了某些默认功能外,它们几乎相同。一个选项
我建议对这样的facebook应用程序使用服务器端“会话”解决方案。例如,为您提供一个Sinatra“缓存”对象,您可以在其中存储序列化对象。您可以设置redis键的过期时间,这样内存就不会积累太多。我建议使用facebook uid作为缓存的密钥,这样无论用户使用的是什么计算机/浏览器,她的会话都是相同的。此外,这样您就不必担心在iframes中设置cookie,这在Safari和Chrome中不起作用
筛选前:@session=cache.fetch(“session-{@uid}”){{}
过滤后:cache.set(“session-{@uid},@session)