Ole*_*røm 9 subdomain session ruby-on-rails session-cookies
嗨我有一个多租户rails 4应用程序,有一个简单的登录解决方案.但是,每个用户都有一个用户在登录后重定向到的子域.
问题在于,当他们到达子域时,由于已知问题会话不在子域之间共享,因此他们不再登录.
我已经尝试了几个不同的解决方案来解决这个问题,但是我没有让会话在子域中持续存在.我相信这可能是由于我的开发环境?
我已经尝试了这个问题的所有答案: 在Rails中的子域之间共享会话(cookie)?
似乎没什么用.这里有什么我想念的吗?它是浏览器还是导轨4或....?我该如何处理这个问题?
编辑: 我的sessions_store初始化程序:
Imagesite::Application.config.session_store :cookie_store, key: '_imagesite_session', :domain => "imagesite.dev"
Run Code Online (Sandbox Code Playgroud)
我也曾尝试".imagesite.dev"
和:all
.
我也尝试了Evan在上面链接的另一个问题中描述的解决方案.
子域的示例: "ole.imagesite.dev"或"ole2.imagesite.dev"只是基于用户输入的子域的基本子域.
Ole*_*røm 14
我终于解决了!
我在创建auth_token cookie时必须设置域.像这样:
cookies[:auth_token] = { value: user.auth_token, domain: ".lvh.me" }
Run Code Online (Sandbox Code Playgroud)
并像这样删除cookie:
cookies.delete(:auth_token, :domain => '.lvh.me')
Run Code Online (Sandbox Code Playgroud)
完整的例子:
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
Run Code Online (Sandbox Code Playgroud)
对于 Rails 4.2.5.1,以下内容对我有用:
Rails.application.config.session_store :cookie_store, key: '_magic_session', tld_length: 2
Run Code Online (Sandbox Code Playgroud)
是的,没有domain: 选项。
更新:最好将该domain:
选项设置为:all
。
Rails.application.config.session_store :cookie_store, key: '_magic_session', domain: :all, tld_length: 2
Run Code Online (Sandbox Code Playgroud)
domain: "magic.com"
如果env["HTTP_HOST"]
在开发环境中或在代理后面拥有 IP 地址(而不是域名),则可能必须如此。对于nginx来说,proxy_set_header HOST $host:$server_port;
可以保存域名。
归档时间: |
|
查看次数: |
5172 次 |
最近记录: |