【发布时间】:2011-07-20 19:26:45
【问题描述】:
虽然问题几乎总是发生在 Internet Explorer 中的用户身上,但在 Firefox 和 Chrome 中也发生过几次。
问题在于用户尝试登录并获得 422 错误或只是被重定向回登录屏幕。我们有一个通配符 cookie,但我们最近将其切换为定位 www(大约 3 个月前),并且之前的 cookie 设置为在会话结束时过期。
我们最近还从 Restful_athentication 切换到 Devise 身份验证,希望它能解决问题,但它似乎没有帮助。但是,我看不出它们是如何相关的,因为它们并没有真正管理 cookie,Rails 可以,它们只是将东西放入 cookie 中。我认为问题可能是restful-auth在奇怪的条件下放入了一些损坏的东西,但显然情况并非如此
更新
在我们切换到 Devise 后,遇到此问题的用户不再收到 422 错误,但现在页面只是刷新,没有任何反应。我还应该提到,当他们输入电子邮件以检索密码时(因为他们认为输入的密码错误),它会返回系统中找不到该电子邮件。
当他们清除 cookie 时,尤其是在 IE 中,他们仍然会遇到同样的问题。我已经让一些用户在 Firefox 中搜索单个 cookie,这已经解决了这个问题。但是,仅仅以正常方式清除 cookie 是行不通的。该问题主要影响 IE7 用户,但似乎遍及整个地图,用户在 Chrome、IE8、Firefox、Safari 和适用于 Ipad 的 Safari 上报告了该问题。
另外,这里是 session_store.rb here 的代码链接,这里的主机在 def ensure_domain 中设置,即here
更新 2
我只是做了一个很小的调整,它改变了它,所以它总是发送一个主机。我尝试在每个浏览器上以各种不同的方式登录,但没有遇到任何问题。我希望这会有所帮助
更新 3(最后更新)
我们尝试了几种不同方法的组合,因此虽然我不确定是什么修复了它,但我最好的猜测是从 4 天到会话结束/浏览器关闭时删除缓存。虽然我对此并不感到兴奋,因为我个人不喜欢每次都必须登录,但我宁愿修复这个问题(而且这个问题直到我们将缓存长度更改为 4 天后才开始出现。)
发送主机是一个错误,实际上让每个人的问题都变得更糟,因为没有人能够登录。另一个奇怪的事情是,当查看创建的 cookie 时,有两个 Session ID cookie,我猜这是导致冲突的原因,尤其是 IE7。一些用户必须清除他们的 cookie 才能仍然登录,但至少在大多数情况下这似乎是有效的。
对于任何有类似问题的人,对不起,我无法提供更多帮助!
【问题讨论】:
-
你能把你的代码贴出来吗?
-
这里是 session_store.rb 的代码:pastie.org/private/ao9nylhul1ioqjcmnyal2g,这里的主机是在 def ensure_domain 中设置的,这里是:pastie.org/private/snqidzyiktweex1bfawg
-
我们的一些用户站点有自定义域,这是上面控制器中使用的代码。
-
您是否有一些日志将 422 返回给您的用户?
-
你有没有覆盖控制器 SessionController 从设计?
标签: ruby-on-rails authentication cookies devise