2010-09-18 84 views
2

我发现了很多描述如何执行此操作的帖子。他们都看起来像把这个在适宜的环境配置文件:如何使用Rails共享子域之间的会话2.3.8

config.action_controller.session[:domain] = '.localhost' 

但是,如果我这样做,那么尝试登录(我用色器件)失败:

ActionController::InvalidAuthenticityToken 

我见其他人发布了相同的问题(向提供建议设置会话[:域]的各种博客的评论部分),但我还没有找到任何人已经回答了为什么发生这个问题以及如何解决它的问题。

任何想法?

回答

1

我不确定这是否与您的问题有关,但您是否尝试将会话域设置为'.localhost'?这不起作用,因为它实际上是您尝试为其设置Cookie的顶级域名。

http://www.ruby-forum.com/topic/181650#794923

1

我有这样的片段在配置/初始化/ set_session_domain.rb:

module ActionControllerExtensions 
    def self.included(base) 
    base::Dispatcher.send :include, DispatcherExtensions 
    end 

    module DispatcherExtensions 
    def self.included(base) 
     base.send :before_dispatch, :set_session_domain 
    end 

    def set_session_domain 
     domain = @env['HTTP_HOST'].gsub(/:\d+$/, '').gsub(/^[^.]*/, '') 
     @env['rack.session.options'].update :domain => domain 
    end 
    end 
end 

ActionController.send :include, ActionControllerExtensions 

一切工作相当不错。