J'utilise devise 1.1.RC0 pour l'authentification des utilisateurs dans une application rails 3.0.0.
En raison d'un problème avec cette version de devise, et du fait que notre processus de connexion se déroule sur un sous-domaine (sécurisé), lorsqu'un utilisateur se connecte, la balise remember_user_token
le cookie n'est pas placé. Cela ne se produit qu'en production lorsque des sous-domaines sont impliqués : l'application définira correctement un cookie de type remember_user_token
lors des tests locaux.
Pour contourner ce problème, j'ai ajusté mes user_sessions#create
pour définir cette remember_user_token
manuellement :
def create
user = User.where("lower(email) = ?", params[:user][:email].downcase).first
if user and user.valid_password?(params[:user][:password])
sign_in(:user, user)
current_user.remember_me = true if params[:user][:remember_me]
#ensure remember_user_token is set
if Rails.env.production?
cookies.signed["remember_user_token"] = {
:value => user.class.serialize_into_cookie(user),
:expires => 3.months.from_now,
:domain => ".app_name.com",
}
end
else
flash[:error] = "Login incorrect"
render :action => 'new'
end
end
Cela établit une remember_user_token
cookie en production. À partir de là, si je supprime le cookie de session à l'aide des outils du navigateur et que je rafraîchis ensuite la page, le cookie de session réapparaît et je reste connecté - ce qui, je suppose, est le but de l'opération. remember_user_token
cookie est responsable.
Toutefois, si je ferme le navigateur et redémarre mon ordinateur alors que je suis connecté, je ne suis plus connecté lorsque je rallume mon ordinateur et que j'accède à l'URL de mon application.
Quelle est la façon correcte de régler cette remember_user_token
cookie ? Qu'est-ce que j'ai raté ? J'apprécierais toute aide.
Voici mon session_store
initialisateur :
if Rails.env.production?
AppName::Application.config.session_store :cookie_store, :key => '_app_name_session', :domain => '.appname.com'
else
AppName::Application.config.session_store :cookie_store, :key => '_app_name_session'
end
Voici le code correspondant dans mon User
modèle :
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable