Ton*_*ony 9 ruby cookies devise ruby-on-rails-3
我已经看到很多关于这个主题的问题,但是很多问题都有相互矛盾的信息,并且由于某些原因它对我没有用.
我有:
顶级域名:即lvh.me(开发).每个用户都有子域名:ie userdomain.lvh.me登录表单位于顶级域名:lvh.me
我想要:
我试过了
在初始化程序中设置以下内容:
MyApplication :: Application.config.session_store:cookie_store,:key =>'_ mykey',:domain =>:all
发生了什么?
我可以登录lvh.me:3000,我被正确地重定向到lvh.me:3000/internalpage,如果我去subdomain.lvh.me:3000,它的效果很好.我也可以从lvh.me:3000/internalpage注销但是如果我尝试从subdomain.lvh.me:3000注销它不起作用.Devise SessionsController中的destroy动作被执行,但是会话并没有消失.
根据http://excid3.com/blog/sharing-a-devise-user-session-across-subdomains-with-rails-3/,
这里的诀窍是:域选项.这样做是设置TLD(顶级域)的级别,并告诉Rails域的长度.你要注意的部分是,如果你设置:domain =>:在某些地方建议使用所有类似的东西,除非你使用localhost,否则它将无法工作.:所有默认值都是TLD长度为1,这意味着如果您使用Pow(myapp.dev)进行测试,它将无法工作,因为这是一个长度为2的TLD.
所以,看完之后我也试过了
MyApplication :: Application.config.session_store:cookie_store,:key =>'_ mykey',: domain =>'lvh.me'
发生了什么? 我可以登录lvh.me:3000,我正确地重定向到lvh.me:3000/internalpage,如果我去subdomain.lvh.me:3000它不起作用,我没有会话.如果我回到lvh.me:3000/internalpage我的会话已经消失了.那里发生了什么?
还有什么?
然后,在阅读rails 3.2子域并设计后,我将初始化器行更改为
MyApplication::Application.config.session_store :cookie_store, :key => '_mykey', :domain => '.lvh.me'
Run Code Online (Sandbox Code Playgroud)
注意"." 在域名之前.根据SO中的帖子:
这允许跨子域访问此cookie,应用程序应该跨子域维护它的会话.可能不是100%你想要的,但它应该让你朝着正确的方向前进.
发生了什么? 没什么,它没用.与我尝试的最后一件事相比,行为相同.
我终于尝试了Rails 3 session_store域名:一切都真的吗? ,创建一个自定义类来处理cookie.但我没有运气.
当然,我在每次尝试之前都删除了所有的cookie和临时文件.我也更改了cookie的名称.有帮助吗?谢谢!
Hug*_*ugo 10
根据这个人在这里:Rails:我如何在多个子域之间共享永久性cookie?您需要手动设置域吗?谷歌搜索它看起来像'.domainname.com'开头的点真的是要走的路.
如果您继承,则Devise::SessionsController可以在创建时手动设置它
class SessionsController < Devise::SessionsController
def create
# modify the cookie here
super
end
end
Run Code Online (Sandbox Code Playgroud)
我正在设置一个工作示例来测试它,之后我会回复,欢呼!
忘记在create上使用令牌进行回火.有问题的是,你需要将令牌域设置为'.lvh.me',这就是它的全部内容,但 domain: '.lvh.me'只是没有做任何事情.这是我的概念证明,最终归结为控制器内部的一个变化:
class HomeController < ApplicationController
def index
cookies[:_cookietest_session] = {domain: '.lvh.me'}
end
end
Run Code Online (Sandbox Code Playgroud)
在Chrome中,令牌看起来像这样
对于subdomain.lvh.me,lvh.me和我试过的任何其他子域名.我可以从任何地方sign_in/sign_out,并相应地创建/销毁会话.
现在我不建议按照我的方式去做,我喜欢中间件方法,我认为如果设置正确可以正常工作.如果您需要进一步的帮助,请告诉我.
干杯!
我回去试试,domain: :all因为它确实应该像你预期的那样工作.如果我访问lvh.me,我会得到一个带有.lvh.me的cookie,但是如果我得到了subdomain.lvh.me,我会得到一个读取.subdomain.lvh.me的内容.

| 归档时间: |
|
| 查看次数: |
3382 次 |
| 最近记录: |