ruby-on-rails – 跨子域访问会话(Rails 4)

我有一个多租户rails 4应用程序,有一个简单的登录解决方案.但是,每个用户都有一个用户登录重定向到的子域.

问题是,当他们到达子域时,由于已知问题会话不在子域之间共享,因此他们不再登录.

我已经尝试了几个不同的解决方案来解决这个问题,但是我没有让会话在子域中持续存在.我相信这可能是由于我的开发环境?

我已经尝试了这个问题的所有答案:
Share session (cookies) between subdomains in Rails?

似乎没什么用.这里有什么我想念的吗?它是浏览器还是导轨4或….?我该如何处理这个问题?

编辑:
我的sessions_store初始值设定项:

Imagesite::Application.config.session_store :cookie_store,key: '_imagesite_session',:domain => "imagesite.dev"

我也试过“.imagesite.dev”和:全部.

我也尝试了Evan在上面链接的另一个问题中描述的解决方案.

子域的示例:“ole.imagesite.dev”或“ole2.imagesite.dev”只是基于用户输入的子域的基本子域.

解决方法

我终于解决了!

我在创建auth_token cookie时必须设置域.像这样:

cookies[:auth_token] = { value: user.auth_token,domain: ".lvh.me" }

并像这样删除cookie:

cookies.delete(:auth_token,:domain => '.lvh.me')

完整的例子:

def create
    user = User.find_by_username(params[:username])
    user ||= User.find_by_email(params[:username])
    if user && user.authenticate(params[:password])
      # session[:user_id] = user.id
        if params[:remember_me]
        cookies.permanent[:auth_token] = { value: user.auth_token,domain: ".lvh.me" }
      else
        cookies[:auth_token] = { value: user.auth_token,domain: ".lvh.me" }
      end
        redirect_to root_url(:subdomain => "#{current_user.subdomain}"),notice: "You are Now loged in."
    else
        flash.Now.alert = "Email or password is invalid"
        render "new"
    end
  end

  def destroy
    #session[:user_id] = nil
    cookies.delete(:auth_token,:domain => '.lvh.me')
    redirect_to root_url(:subdomain => false),notice: "Loged out"
  end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...