как использовать before_action с методами after_sign_in_path_for и after_inactive_sign_up_path_for?

Я хочу использовать методы after_sign_in_path_for и after_inactive_sign_up_path_for для перенаправления пользователя на определенную страницу, я бы поместил эти два метода и before_action :authenticate_user! все в контроллер приложения, однако при запуске метода before_action он будет вызываться для всех действий, которые будут перенаправлять мои приложение на неправильные маршруты. Должен ли я использовать before_action :authenticate_user!, except: [:after_sign_in_path_for, :after_inactive_sign_up_path_for], чтобы пропустить аутентификацию для этих двух методов?

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  before_action :authenticate!


  def after_sign_in_path_for(user)
      if user && user.is_a?(Vendor)
          return edit_vendor_registration_path
          elsif user && user.is_a?(Customer)
          return dashboard_path
      end
  end

  def after_sign_out_path_for(user)
      if user && user.is_a?(Vendor)
          return root_path
          elsif user && user.is_a?(Customer)
          return root_path
      end
  end


  def authenticate!
      if @current_user == current_customer
          :authenticate_customer!
          elsif @current_user == current_vendor
          :authenticate_vendor!
      end
  end
end

Я столкнулся с этой ошибкой Filter chain halted as :require_no_authentication rendered or redirected, я считаю, что программа каким-то образом создала бесконечный цикл, который продолжает перенаправляться на путь к панели инструментов.


person KhoaVo    schedule 10.05.2016    source источник
comment
Это означает, что метод before_action не должен влиять на эти два метода? но я получаю перенаправление на неправильные маршруты при использовании перед действием и двумя методами в контроллере приложения   -  person KhoaVo    schedule 11.05.2016


Ответы (1)


Я думаю, вы смешиваете несколько вещей.

before_action :authenticate_user! используется для каждого действия контроллера, когда вы хотите, чтобы пользователь прошел аутентификацию, чтобы он мог продолжить свой запрос.

например after_sign_in_path_for — это метод контроллера разработки, который можно переопределить следующим образом: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-%28registration%29

person Chris    schedule 10.05.2016
comment
Я знаю это, но кажется, что before_action влияет на перенаправление метода after_sign_in_path_for, так как мне это исправить? - person KhoaVo; 11.05.2016
comment
Пожалуйста, напишите код, иначе очень сложно помочь - person Chris; 11.05.2016
comment
я разместил код вместе с сообщением об ошибке, которое я получаю - person KhoaVo; 11.05.2016
comment
Выполните after_sign_in_paths, как указано в руководстве. Насчет метода authenticate! я не уверен, потому что не знаю, что вызывают current_customer и current_vendor. Где определены эти методы? - person Chris; 11.05.2016
comment
также я не вижу смысла в том, что пользователь перенаправляется на панель инструментов / редактирует свою учетную запись после входа и выхода. - person Chris; 11.05.2016
comment
о, извините, я не обновил этот вопрос, я обновил код, пользователь должен быть перенаправлен на панель инструментов / редактировать после успешного входа в систему и на домашнюю страницу после успешного выхода из системы. - person KhoaVo; 11.05.2016