Rails 3 - chaîne de Filtre à l'arrêt comme :l'authentification rendus ou redirigé
Je reçois toujours le message "erreur" dans le titre et je ne sais pas, comment le résoudre.
Dans le ApplicationController,
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :mailer_set_url_options
helper_method :current_user_session, :current_user
def mailer_set_url_options
ActionMailer::Base.default_url_options[:host] = request.host_with_port
end
private
def current_user_session
logger.debug "ApplicationController::current_user_session"
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
logger.debug "ApplicationController::current_user"
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.user
end
def authentication
logger.debug "ApplicationController::authentication"
unless current_user
store_location
flash[:warning] = "You must be logged out to access this page"
redirect_to root_url
return false
end
end
def store_location
session[:return_to] = request.url
end
end
dans le routes.rb
#match 'set_activity_account/:id/:value' => 'users#account_activity', :as => :set_activity_account -- this doesn't work as well..
resources :users do
member do
get :action_a, :action_b
end
collection do
get 'account_activity'
end
end
et la UsersController
class UsersController < ApplicationController
before_filter :authentication, only: [:index, :edit, :update, :destroy, :action_a, :action_b]
#skip_before_filter :authentication, :only => [:account_activity] didn't help as well
def account_activity
unless current_user.nil?
puts 'A'
if params[:user_id] && params[:status]
puts 'B'
User.find(params[:user_id]).update_attributes(:active => params[:status])
flash[:notice] = 'Activity was successfully changed.'
end
end
redirect_to :back
end
...
Toujours quand est-mis à jour le active attribut, je reçois le message
Redirigé localhost:3000/
Chaîne de filtre à l'arrêt comme :l'authentification rendus ou redirigé
EDIT: Ajout de la sortie de fichier journal:
Started GET "/users/account_activity?user_id=31&status=0" for 127.0.0.1 at 2012-09-28 00:40:10 +0200
Processing by UsersController#account_activity as HTML
Parameters: {"user_id"=>"31", "status"=>"0"}
ApplicationController::current_user
ApplicationController::current_user_session
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."persistence_token" = '...' LIMIT 1
(0.1ms) BEGIN
(0.7ms) UPDATE "users" SET "last_request_at" = '2012-09-27 22:40:10.258152', "perishable_token" = '...', "updated_at" = '2012-09-27 22:40:10.259093' WHERE "users"."id" = 31
(0.7ms) COMMIT
ApplicationController::current_user_session
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", "31"]]
(0.1ms) BEGIN
User Exists (0.6ms) SELECT 1 FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 31) LIMIT 1
(0.5ms) UPDATE "users" SET "active" = 0, "perishable_token" = '...', "updated_at" = '2012-09-27 22:40:10.267227' WHERE "users"."id" = 31
(0.7ms) COMMIT
Redirected to http://localhost:3000/users/31/edit
Completed 302 Found in 19ms (ActiveRecord: 4.5ms)
Started GET "/users/31/edit" for 127.0.0.1 at 2012-09-28 00:40:10 +0200
Processing by UsersController#edit as HTML
Parameters: {"id"=>"31"}
ApplicationController::authentication
ApplicationController::current_user
ApplicationController::current_user_session
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."persistence_token" = '...' LIMIT 1
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
Redirected to http://localhost:3000/
Filter chain halted as :authentication rendered or redirected
Completed 302 Found in 5ms (ActiveRecord: 1.3ms)
Comment puis-je résoudre ce problème? J'ai essayé de chercher sur google ici, mais malheureusement ne sais toujours pas comment le résoudre..
- Vous aurez besoin d'afficher plus au sujet de ce qui se passe, comme si la demande est en provenance et/ou un journal d'erreurs. Ma conjecture est que "redirect_to :back" est l'envoi de votre application à l'une de ces actions dans le before_filter liste pour :l'authentification au niveau du haut de votre contrôleur.
- - Je mettre à jour mon OP - ajout de la sortie de journaux. Oui, je redirige l'application de l'action, qui est dans le
before_filter
liste à l'actionedit
. Mais à l'actionedit
est app redirigé aussi de l'actionupdate
- et c'est bien le travail. Aussi, si je supprime la redirection, puis régler manuellement leshome url
de mon application, j'obtiens le même message d'erreur...
Vous devez vous connecter pour publier un commentaire.
la chaîne de filtre s'arrête lorsque vous rediriger quelque part de before_filter. si tout ce travail que vous pouvez ignorer ce message
J'ai eu cette erreur juste avec un de mes utilisateurs.
Il s'est avéré que l'utilisateur a un champ (étaient nous avons récemment ajouté une longueur de validation) avec plus de texte que le permis. Que la validation était nouveau et que l'utilisateur était déjà là, que l'erreur ne cessaient de.
Je l'ai trouvé lors de la tentative de mise à jour de ses attributs à l'aide de "!" pour rendre les erreurs explicites
La modification du contenu du champ "Résumé" résolu.