饼干 - 我可能会对ruby / rails感到疯狂

时间:2011-09-20 22:12:17

标签: ruby-on-rails ruby cookies curl net-http

是否可以使用net / http或curl登录,保存cookie响应然后将该cookie写入用户浏览器,以便我可以“推送登录”(在某种意义上)?

有没有另一种方法可以做到这一点,这是可能的,还是我只是疯了?

我知道如何使用net / http登录保存cookie并在服务器端执行操作。

我只是不想花时间将cookie保存到数据库,然后将其写入浏览器,并在成功重定向浏览器时,如果由于安全限制而无法实现这一点。

2 个答案:

答案 0 :(得分:1)

您只能为当前域编写Cookie - 因此,如果您希望通过net / http从domaina.com有效连接到domainb.com,请阅读domainb.com返回的cookie并为之前预设将它们重定向到domainb.com,然后这将无效。

但是,如果您只是想从domainb.com读取返回的cookie并在domaina.com上有效地复制它们,那么您没有理由不这样做。类似的东西:

# perform your request...
# once the response has been returned, loop through each cookie
response.get_fields('set-cookie').each do |cookie|
  # set your local cookie here
end

如果您想在两个域之间实现自动登录,我发现这样做的最佳方式是:

1)domaina.com说“嘿,我在这里有用户ABC,我可以为他们准备一个身份验证令牌吗?”到domainb.com的API。 2)domainb.com的API为该用户创建一个令牌,限制到期为1分钟,然后将其作为对domaina.com的响应发送 3)domaina.com将用户重定向到domainb.com,并将身份验证令牌作为参数传递 4)domainb.com收到用户的请求(来自重定向),在DB中查找令牌,然后自动登录用户,如果找到了

当然这需要您控制两个域的系统......如果不这样做,那么oauth可能是您最佳的跨站点身份验证机制。

答案 1 :(得分:1)

这听起来非常适合基于authentication_token的登录,只要链接正确(例如http://www.example.com/posts/new?auth_token=1asdfj2828728we924834),用户就会自动登录。查看设计:http://www.hyperionreactor.net/blog/token-based-authentication-rails-3-and-rails-2