2010-06-29 13 views

Répondre

0

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

2

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

1

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.