ruby - 使用 Sinatra : Signed Cookie (with Rack) 的 Facebook Canvas 身份验证

标签 ruby facebook sinatra rack session-cookies

根据 Facebook signed_request,我想创建一个安全 cookie 并使用只有我知道的 Facebook 应用程序的 secret 对其进行签名.

我已经实现了 Ruby method that decodes the signed_request sent by Facebook .

那行得通,但现在,作为 runwithfriends确实如此,我想向客户端发回一个使用相同签名程序的 cookie。

我正在浏览 rack source code ,看起来它提供了这个功能。

不过,我想知道如何在 Sinatra 中执行此操作。看起来 set_cookieset_cookie_headers 的包装器,似乎不接受 secret 。所以,我想我必须用 Rack 来做。我会尝试并报告。

与此同时,Sinatra Book说它提供基于 session 的 cookie。

那么,设置 cookie 的区别是什么:

set_cookie("u", 123)

或设置 session 变量:

session["u"] = 123

我发现自己正在研究 Sinatra & Rack 源代码。我有个主意。我认为除了某些默认功能外它们几乎相同。

最佳答案

一个选项。

我建议为这样的 Facebook 应用程序使用服务器端“ session ”解决方案。 https://github.com/jodosha/redis-store例如,为您提供一个 Sinatra“缓存”对象,您可以在其中存储序列化对象。您可以为 Redis 键设置过期时间,这样内存就不会堆积太多。我建议使用 facebook uid 作为缓存的键,这样无论用户使用什么计算机/浏览器,她的 session 总是相同的。此外,这样您就不必担心在 iframe 中设置 cookie,这在 Safari 和 Chrome 中不起作用。

过滤器之前:@session = cache.fetch("session-#{@uid}") { {} }

过滤后:cache.set("session-#{@uid}", @session)

关于ruby - 使用 Sinatra : Signed Cookie (with Rack) 的 Facebook Canvas 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754975/

相关文章:

ruby - 如何将 Ruby 博客添加到 Rails 3 应用程序

ruby - 从 Heroku 应用程序中访问当前的 git 提交号

ruby - 数组的数组 - 如何选择唯一元素?

ruby-on-rails - rb_gc() 上的跨线程冲突

Ruby 文件 IO 定界符?

Facebook 如何使用 Graph API 获取实际照片 URL?

facebook - 如何阻止来自 facebook 机器人的 403 和 404 http 错误和/或刷新共享缓存

ruby-on-rails - 如何标准化Rails项目的JSON结果

facebook - 如何使用新的图形 API 在 FB 中显示扩展权限对话框?

ruby - 如何测量 Rack 或 Sinatra 应用程序的内存使用情况?