Tôi vẫn nhận được thông báo "lỗi" trong tiêu đề và không biết, cách giải quyết. Trong ApplicationController,Rails 3 - Chuỗi bộ lọc bị tạm dừng là: xác thực được hiển thị hoặc chuyển hướng
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
trong 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
và 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
...
Luôn luôn khi được cập nhật các hoạt động thuộc tính, tôi sẽ nhận được thông báo localhost đổi hướng: 3000/ chuỗi Lọc dừng lại như: xác thực trả lại hoặc chuyển hướng
EDIT: thêm sản lượng từ log file:
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)
Làm thế nào tôi có thể khắc phục sự cố này? Tôi đã cố gắng tìm kiếm trên google ở đây trên SO, nhưng tiếc là vẫn không biết, làm thế nào để sửa chữa nó ..
Bạn sẽ cần hiển thị thêm về những gì đang diễn ra, như yêu cầu đến từ đâu và/hoặc nhật ký lỗi. Tôi đoán là "redirect_to: back" đang gửi đến ứng dụng của bạn đến một trong các hành động trong danh sách before_filter cho: xác thực ở đầu bộ điều khiển của bạn. – rossta
@rossta Tôi cập nhật đầu ra OP của tôi từ nhật ký. Có, tôi chuyển hướng ứng dụng đến hành động, nằm trong danh sách 'before_filter' - cho hành động' chỉnh sửa'. Nhưng với hành động 'chỉnh sửa', ứng dụng cũng được chuyển hướng từ hành động' update'- và điều này hoạt động tốt. Ngoài ra, nếu tôi xóa chuyển hướng và sau đó tự thiết lập 'url trang chủ' của ứng dụng của tôi, sau đó tôi nhận được lỗi tương tự ... – user984621