gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:36 25 4
gpt4 key购买 nike

根据 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com