当用户在example.com
登录我的网站时,我希望他在访问something.example.com
时登录。我怎么能做到这一点? (如果相关,我正在使用subdomain-fu)
答案 0 :(得分:2)
嗯,你可以在“127.0.0.1 localhost”之后在/ etc / hosts中添加以下行
127.0.0.1 localhost.com
127.0.0.1 sub.localhost.com
然后编辑您的environment / development.rb并添加
config.action_controller.session = { :domain => '.localhost.com' }
从现在起,使用http://localhost.com:3000或相同但使用子域在本地访问您的应用。
[更新]哎呀,这是Horace Loeb的答案
答案 1 :(得分:1)
对于Rails3,上面的代码将引发NoMethodError
:
undefined method `session=' for ActionController::Base:Class
因此,对于Rails3,您不应该更改环境配置,但应将app/config/initializers/session_store.rb
设置为:
YourAppName::Application.config.session_store :active_record_store,
{:key => '_your_namespace_session', :domain => '.yourdomain.com'}
更改初始化程序后,您还需要重新启动网络服务器才能应用初始化程序。
请注意,在代码更新之前登录的用户之后将无法注销,因为默认的注销操作看起来像是:
destroy
current_user_session.destroy
flash[:notice] = "You have been logged out"
redirect_to root_path
end
是不够的 - 默认情况下,它不会删除非通配符域user_credentials
的{{1}} cookie集。所以你应该将yourdomain.com
添加到destroy动作中,所以它看起来像这样:
cookies.delete :user_credentials
这很奇怪,但是在销毁用户会话之后应该添加它,尽管此时destroy
current_user_session.destroy
cookies.delete :user_credentials
flash[:notice] = "You have been logged out"
redirect_to root_path
end
。此外,还有一个问题是,在用户注销后,cookies[:user_credentials].is_nil? == true
操作中的cookies.delete :user_credentials
登录也会导致用户无法注销,应将其删除。有人有解决方案吗?
更新。最后我想到了 - 我通过迁移向User模型添加了一个布尔标志:
destroy
以这种方式改变了破坏行动:
class AddReloginedToUsers < ActiveRecord::Migration
def change
add_column :users, :relogined, :boolean, :default => false
end
end
现在一切都按预期工作,虽然这不是一个非常漂亮的解决方案。如果有人提供更聪明的东西,我会很高兴的。
答案 2 :(得分:0)
修复方法是将其添加到production.rb
:
if config.action_controller.session
config.action_controller.session[:domain] = '.your-site.com'
else
config.action_controller.session = { :domain => '.your-site.com' }
end
我仍然无法使用localhost:3000
开发它,但无论如何