복붙노트

[RUBY-ON-RAILS] 로그인 후 유증 리디렉션 실패

RUBY-ON-RAILS

로그인 후 유증 리디렉션 실패

내가 찾은 모든 질문은 도우미와 성공적인 로그인에 대한 관련 after_sign_in_path_for (자원)

나는 사이트의 인덱스에 로그인 양식을 가지고 있고, 로그인이 실패 할 경우는 "사용자 / sign_in"로 리디렉션

그러나 어떻게 로그인 실패 내 "사이트 # 지수"로 리디렉션 할 수 있습니까?

해결법

  1. ==============================

    1.서버를 다시 시작하는 것을 잊지 마십시오.

    서버를 다시 시작하는 것을 잊지 마십시오.

    나는이 작업을 수행 할 수있는 쉬운 방법이 있다고 생각하지 않습니다. 행운을 빕니다.

  2. ==============================

    2.당신이 당신의 자신의 SessionsController를 사용하는 경우, 당신은 다시 할당 할 수 있습니다 auth_options의 리콜 값이 warden.authenticate을 실행하기 전에 당신이 원하는 컨트롤러 # 방법을 리콜 (auth_options), 예를 들어! :

    당신이 당신의 자신의 SessionsController를 사용하는 경우, 당신은 다시 할당 할 수 있습니다 auth_options의 리콜 값이 warden.authenticate을 실행하기 전에 당신이 원하는 컨트롤러 # 방법을 리콜 (auth_options), 예를 들어! :

    응용 프로그램 / 컨트롤러 / 사용자 / sessions_controller.rb에서

    class Users::SessionsController < Devise::SessionsController
      #...
      def create
        #...
        auth_options = { :recall => 'site#index', :scope => :user }
        resource = warden.authenticate!(auth_options)
        #...
      end
      #...
    end
    

    이 방법을 사용하면 CONFIGS을 사용자 정의 FailureApp을 작성하고 수정할 필요가 없습니다.

  3. ==============================

    3.이 유증 3.1.0으로 일어나는 것이다

    이 유증 3.1.0으로 일어나는 것이다

    Started POST "/users/sign_in"
    Processing by Devise::SessionsController#create
    Completed 401 Unauthorized
    Processing by Devise::SessionsController#new
    

    새로운 때문에 보석의 끝에서 정의 된 auth_options의 호출되는 / 유증-3.1.0 / 응용 프로그램 / 컨트롤러 / 궁리 / sessions_controller.rb

    당신은 만드는 작업에 사용되는 auth_options를 재정의해야합니다. 내 레일 응용 프로그램의 응용 프로그램 / 컨트롤러 / 궁리 / sessions_controller.rb에서 컨트롤러를 복사하고이 같은 auth_options 방법을 대체

    def auth_options
      { :scope => resource_name, :recall => "Home#new" }
    end
    

    이 트릭을 수행하지만 URL은 여전히 ​​/ 사용자 / sign_in입니다

    나는뿐만 아니라 그 문제를 해결하려고합니다.

  4. ==============================

    4.당신은 기본 sign_in 경로를 변경할 수 있습니다.

    당신은 기본 sign_in 경로를 변경할 수 있습니다.

    https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes 체크 아웃

  5. ==============================

    5.Marcao의 대답에 정교하게, 내가보기 엔 더 나은 무슨 일이 일어나고 있는지 이해하기 위해 당신의 CustomFailure의 응답 방법에 약간의 디버거를 배치하는 것이 좋습니다.

    Marcao의 대답에 정교하게, 내가보기 엔 더 나은 무슨 일이 일어나고 있는지 이해하기 위해 당신의 CustomFailure의 응답 방법에 약간의 디버거를 배치하는 것이 좋습니다.

    Class CustomFailure < Devise::FailureApp
      def respond
        binding.pry
        super
      end
    end
    

    당신이 응답 방법에 대한 FailureApp 고안 소스 코드를 보면 그것은 아주 쉽게에 무슨 일이 일어나고 있는지 이해하는 것입니다.

    def respond
      if http_auth?
        http_auth
      elsif warden_options[:recall]
        recall
      else
        redirect
      end
    end
    

    그래서 REDIRECT_URL를 반환하기 위해 예를 들어, 당신은 확실히 당신의 응답 코드를 조건문 결국 리디렉션을 반환 있는지 확인하려는 것입니다.

    그러나 당신이 http_auth 방법에 정의 된대로 어쩌면 표준 (401 개) 상태를 반환 할 경우, 확인하려는 사용자의 응답 방법 코드를 반환 http_auth 그.

    따라서 가치는 http_auth의 정의를 조사하기 위해 잠시입니까? request.xhr : 특히,주의? (0 실제로 루비에서 true로 평가하는 리콜) JSON 요청에 대해 0을 반환 방법

    def http_auth?
      if request.xhr?
        Devise.http_authenticatable_on_xhr
      else
        !(request_format && is_navigational_format?)
      end
    end
    

    그리고 어쩌면 당신이 원하는 응답을 제어하기 위해 config.http_authenticatable_on_xhr 또는 config.navigational_formats에 대한 초기화 / 유증 파일을 확인하십시오. 이 구성은 정말 무엇을 고안 반환에 영향을 미칠 수 종종 그것 때문에 후드 여기에 무엇에 예기치 않은 동작이 발생할 수 있습니다.

  6. from https://stackoverflow.com/questions/5832631/devise-redirect-after-login-fail by cc-by-sa and MIT license