Ich bekomme immer noch die Fehlermeldung "Fehler" im Titel und weiß nicht, wie man es löst. Im Application,Rails 3 - Filterkette angehalten als: Authentifizierung gerendert oder umgeleitet
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
im 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
und der 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
...
Immer, wenn die aktiv aktualisiert Attribut, werde ich die Nachricht Weitergeleitet localhost erhalten: 3000/ Filterkette gestoppt: Authentifizierung
EDIT gemacht oder umgeleitet: Hinzugefügt Ausgabe von Log-Datei:
Started GET "https://stackoverflow.com/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 "https://stackoverflow.com/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)
Wie kann ich behebt dieses Problem? Ich habe versucht, auf Google hier auf SO zu suchen, aber leider immer noch nicht, wie man es repariert.
Sie müssen mehr über das, was passiert, wie zum Beispiel, woher die Anfrage kommt und/oder ein Fehlerprotokoll. Meine Vermutung ist, dass "redirect_to: back" sendet an Ihre App zu einer der Aktionen in der before_filter Liste für: Authentifizierung an der Spitze des Controllers. – rossta
@rossta Ich aktualisiere mein OP - hinzugefügt Ausgabe von Protokollen. Ja, ich leite die App auf die Aktion, die sich in der 'before_filter'-Liste befindet, auf die Aktion' edit' um. Aber zur Aktion 'edit' wird die App auch von der Aktion' update' weitergeleitet - und das funktioniert gut. Außerdem, wenn ich die Weiterleitung entferne und dann manuell die "Home URL" meiner App einrichte, bekomme ich den gleichen Fehler ... – user984621