2012-09-27 16 views
5

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 

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ó ..

+0

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

+0

@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

Trả lời

3

Tôi nhận được lỗi đó chỉ với một trong những người dùng của tôi.

Hóa ra là người dùng đã có một trường (gần đây chúng tôi đã thêm xác thực chiều dài) có nhiều văn bản hơn mức được cho phép. Khi xác nhận mới và người dùng đã ở đó, lỗi đó vẫn được hiển thị.

Tôi tìm thấy nó khi cố gắng cập nhật thuộc tính của nó bằng cách sử dụng "!" để làm cho những sai lầm rõ ràng

> User.last.update_attributes!(:email => "[email protected]") 

tài Load (0.3ms) CHỌN users. * FROM users ORDER BY users. id DESC LIMIT 1 (0.1ms) BEGIN người dùng tồn tại (0.2ms) SELECT 1 AS một TỪ users WHERE (users. email = '[email protected]' VÀ users. id! = 2020) LIMIT 1 (0.1ms) rollback ActiveRecord :: RecordInvalid: Validation thất bại: Tóm tắt quá dài (tối đa là 650 ký tự)

Vì vậy, thay đổi nội dung của lĩnh vực đó "Tóm tắt" giải quyết nó.

+0

+1 cho "!" - lừa. Không có ý tưởng về điều đó và nó dẫn đến khắc phục vấn đề này cho tôi. – Kasperi

5

chuỗi bộ lọc tạm dừng khi bạn chuyển hướng đến một nơi nào đó từ before_filter. nếu mọi thứ hoạt động chính xác hơn bạn có thể bỏ qua thông báo này