Lorsqu'un utilisateur se connecte à mon site au example.com
, je souhaite qu'il soit connecté lorsqu'il visite le something.example.com
. Comment puis-je accomplir cela? (J'utilise un sous-domaine-fu le cas échéant)Comment faire fonctionner les sessions Authlogic pour tous les sous-domaines
Répondre
Le correctif est d'ajouter à 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
Je ne peux toujours pas à travailler dans le développement avec localhost:3000
, mais quel que soit
Eh bien, vous pouvez, ajouter juste après les lignes dans/etc/hosts après "127.0.0.1 localhost"
127.0.0.1 localhost.com
127.0.0.1 sub.localhost.com
vous pouvez alors modifier votre environnement/development.rb et ajouter
config.action_controller.session = { :domain => '.localhost.com' }
A partir de maintenant sur l'utilisation http://localhost.com:3000 ou le même, mais avec sous-domaine pour accéder à votre application localement.
[mise à jour] oups, ce fut la réponse à Horace Loeb
Pour Rails3 le code ci-dessus soulever NoMethodError
:
undefined method `session=' for ActionController::Base:Class
Alors, pour Rails3 vous ne devriez pas vous changer config environnement, mais devrait définir votre app/config/initializers/session_store.rb
pour ressembler:
YourAppName::Application.config.session_store :active_record_store,
{:key => '_your_namespace_session', :domain => '.yourdomain.com'}
également après avoir changé le initialiseur vous aurez besoin de redémarrer un serveur Web afin d'appliquer la initia lizer.
avis, que les utilisateurs qui se sont connectés avant la mise à jour du code ne sera pas en mesure de logout parce que l'action de fermeture de session par défaut qui est à la recherche quelque chose comme:
destroy
current_user_session.destroy
flash[:notice] = "You have been logged out"
redirect_to root_path
end
ne suffit pas - il ne supprimer user_credentials
ensemble de cookies pour un domaine non générique yourdomain.com
par défaut. Donc, vous devez ajouter cookies.delete :user_credentials
à détruire l'action il ressemblera à ceci:
destroy
current_user_session.destroy
cookies.delete :user_credentials
flash[:notice] = "You have been logged out"
redirect_to root_path
end
Et ce qui est étrange, mais il devrait être ajouté après la destruction de session utilisateur malgré cookies[:user_credentials].is_nil? == true
à ce stade. Il existe également un problème: après une déconnexion de l'utilisateur et des connexions cookies.delete :user_credentials
dans l'action destroy
, les utilisateurs ne peuvent pas se déconnecter et doivent être supprimés. Est-ce que quelqu'un a une solution pour cela?
Mise à jour. Enfin, je suis venu à cette question - j'ai ajouté un drapeau booléen au modèle de l'utilisateur via la migration:
class AddReloginedToUsers < ActiveRecord::Migration
def change
add_column :users, :relogined, :boolean, :default => false
end
end
et changé l'action détruire cette façon:
def destroy
current_user_session.destroy
if !current_user.relogined
current_user.relogined = true
current_user.save
cookies.delete(:user_credentials)
end
session = nil
flash[:notice] = "You have been logged out"
redirect_to root_path
end
Maintenant, tout fonctionne comme prévu, bien que ce n'est pas très belle solution. Je serai heureux si quelqu'un fournit quelque chose de plus intelligent.