:sauf de ne pas travailler dans before_filter en application du contrôleur. Problème de routage?
J'ai un before_filter dans mon contrôleur d'application pour garder la session d'un utilisateur en vie (et la session si le temps a été atteint). Ce doit être appelée sur chaque action, à l'exception de /sessions/nouvelles et /sessions/détruire qui sont acheminés comme /login et /déconnexion.
Les parties pertinentes de mon contrôleur d'application ressembler à ceci;
class ApplicationController < ActionController::Base
before_filter :update_activity_time, :except => [:login, :logout]
private
def update_activity_time
if current_user
time_out = current_user.setting.remember_me ? 20160 : current_user.setting.user_timeout
from_now = time_out.minutes.from_now
end
if session[:expires_at].blank?
session[:expires_at] = from_now
else
time_left = (session[:expires_at].utc - Time.now.utc).to_i
if time_left <= 0
session_expiry
else
session[:expires_at] = from_now
end
end
end
def session_expiry
reset_session
flash[:notice] = 'Your session has expired. Please log back in.'
unless request.xhr?
session[:return_to] = request.request_uri
redirect_to login_url
else
session[:return_to] = request.referer
render :js => "window.location.replace(\"#{login_url}\")"
end
end
end
et mes itinéraires.rb contient les éléments suivants;
map.login "login", :controller => "sessions", :action => "new"
map.logout "logout", :controller => "sessions", :action => "destroy"
Le before_filter est appelé lors de l' /login ou /déconnexion sont en train d'être visité. Ce n'est pas un show-bouchon mais il cause un peu bizarre comportements (par exemple, lors de la déconnexion à partir d'une page a expiré).
Les idées de ce que je fais mal? Je suis à l'aide de Rails 2.3.10.
OriginalL'auteur brad | 2011-02-22
Vous devez vous connecter pour publier un commentaire.
La
:except
option prend des noms d'action, pas d'url pièces. Voici ce que vous devez faire à la place:Puis, dans
sessions_controller.rb
:Vous ne voulez pas mettre le
:except
dansApplicationController
parce que, si vous l'avez fait, lenew
etdestroy
actions pour chaque personne de votre application contrôleurs ne serait pas de mise à jour de la période d'activité.OriginalL'auteur Brian Donovan