1

所以,我正在尝试使用身份验证令牌进行直接登录链接,但我正在进入Filter chain halted as :after_token_authentication rendered or redirected我的服务器日志

    class ApplicationController < ActionController::Base
      protect_from_forgery
      before_filter :store_location
      before_filter :authenticate_user!
      before_filter :after_token_authentication
      check_authorization :unless => :devise_controller?

      rescue_from CanCan::AccessDenied do |exception|
        session[:previous_url] = nil
        redirect_to root_url
      end


      def store_location
        # reset_session
        # store last url - this is needed for post-login redirect to whatever the user last visited.

        if (request.fullpath != "/user/sign_in" && \
            request.fullpath != "/user/sign_up" && \
            request.fullpath != "/user/password" && \
            !request.fullpath.include?("/user") && \
            !request.fullpath.include?("/admin") && \
            !request.xhr?) # don't store ajax calls
          session[:previous_url] = request.fullpath
        end
      end

      def after_sign_in_path_for(resource)
        if current_user.admin?
          admin_dashboard_path
        elsif current_user.contractor?
          if current_user.contractor.business_name == 'Test Devise'
            'url'
          else
            contractor_dashboard_path
          end
        else
          session[:previous_url] || homeowner_service_requests_path
        end
      end

      #generates 6-digit random password (a-z, 0-9) for sending to users when BuildZoom creates user account after they express interest in a service request, leave a review
      def generate_temporary_password
        rand(36**6).to_s(36)
      end




      protected


      def after_token_authentication
    if params[:authentication_key].present?
      @user = User.find_by_authentication_token(params[:authentication_key])
      sign_in @user if @user
      welcome = @user.approved.eql?(7) and @user.type.eql?(2)
      @user.approved = 0
      @user.save
      unless welcome
        redirect_to root_path
      else
        redirect_to contractor_welcome_path
      end
    elsif params[:auth_token].present? && params[:location] == "galleries"
       @current_user = User.find_by_authentication_token(params[:auth_token])
        sign_in @current_user if @current_user
        @current_user.approved = 0
        @current_user.save
        debugger
      redirect_to contractor_list_galleries_path
    end
  end

      def after_sign_out_path_for(resource)
        'url'
      end
    end

这是服务器日志:

    Started GET "/?auth_token=uN8QFMsocpDyhWKCx9QN&location=galleries" for 127.0.0.1 at 2013-09-20 22:38:37 -0700
Processing by PagesController#home as HTML
  Parameters: {"auth_token"=>"uN8QFMsocpDyhWKCx9QN", "location"=>"galleries"}
Geokit is using the domain:
  User Load (189.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`authentication_token` = 'uN8QFMsocpDyhWKCx9QN' LIMIT 1
   (109.5ms)  BEGIN
   (111.7ms)  UPDATE `users` SET `last_sign_in_at` = '2013-09-21 05:38:28', `current_sign_in_at` = '2013-09-21 05:38:38', `sign_in_count` = 61, `updated_at` = '2013-09-21 05:38:38' WHERE `users`.`uid` = 149407
   (95.6ms)  COMMIT
  User Load (184.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`authentication_token` = 'uN8QFMsocpDyhWKCx9QN' LIMIT 1
   (93.3ms)  BEGIN
   (109.5ms)  COMMIT
Redirected to http://0.0.0.0:3000/contractor/galleries
Filter chain halted as :after_token_authentication rendered or redirected
Completed 302 Found in 10884ms (ActiveRecord: 893.2ms)


Started GET "/contractor/galleries" for 127.0.0.1 at 2013-09-20 22:38:48 -0700
Processing by Contractor::ContractorGalleriesController#index as HTML
Geokit is using the domain:
Completed 401 Unauthorized in 1ms


Started GET "/contractor/galleries" for 127.0.0.1 at 2013-09-20 22:38:49 -0700
Processing by Contractor::ContractorGalleriesController#index as HTML
Geokit is using the domain:
Completed 401 Unauthorized in 1ms


Started GET "/user/sign_in" for 127.0.0.1 at 2013-09-20 22:38:49 -0700
Processing by Devise::SessionsController#new as HTML
Geokit is using the domain:
  Rendered devise/shared/_links.erb (0.5ms)
  Rendered devise/sessions/new.html.erb within layouts/application (3.7ms)
  Rendered shared/_mixpanel.html.erb (0.2ms)
  Rendered layouts/_head.html.erb (12.4ms)
  Rendered layouts/_navigation.html.erb (0.6ms)
  Rendered layouts/_messages.html.erb (0.1ms)
  Rendered shared/_olark (0.0ms)
  Rendered layouts/_footer.html.erb (1.2ms)
Completed 200 OK in 64ms (Views: 62.5ms | ActiveRecord: 0.0ms)


Started GET "/user/sign_in" for 127.0.0.1 at 2013-09-20 22:38:49 -0700
Processing by Devise::SessionsController#new as HTML
Geokit is using the domain:
  Rendered devise/shared/_links.erb (0.5ms)
  Rendered devise/sessions/new.html.erb within layouts/application (4.8ms)
  Rendered shared/_mixpanel.html.erb (0.1ms)
  Rendered layouts/_head.html.erb (11.5ms)
  Rendered layouts/_navigation.html.erb (0.6ms)
  Rendered layouts/_messages.html.erb (0.0ms)
  Rendered shared/_olark (0.0ms)
  Rendered layouts/_footer.html.erb (1.1ms)
Completed 200 OK in 113ms (Views: 111.4ms | ActiveRecord: 0.0ms)
4

2 回答 2

1

将其从 更改@user@current_userin after_token_authentication。您的authenticate_user!调用需要@current_user按照此处进行设置:“authenticate_user!”的设计实现在哪里?方法?

于 2013-09-21T05:02:10.533 回答
0

此消息仅表示在您的一个之前的过滤器中呈现了模板或发生了重定向。在您的情况下,after_token_authentication过滤器重定向到contractor_list_galleries_path,这结束了之前的过滤器链。此消息不是错误,它只是显示重定向发生在过滤器之前而不是实际操作中。

于 2013-09-21T04:37:37.083 回答