0

두 개의 요청 (iframe)이 브라우저에서 레일스 앱 (레일 3.2, 개발자 2.2.0)으로 이루어진 경우 SSO를 통해 로그인을 시작한 다음 요청한 페이지 문제는 session[:user_return_to]에 대한 경쟁 조건이 있고 두 페이지가 같은 페이지를 렌더링하므로 iframe 중 하나가 잘못된 페이지를 렌더링하게됩니다. 로그인 할 때 Devise에서 원래 경로 유지하기

대신 요청이 돌아 오면
  • /sso/new로 리디렉션 렌더링에 지금

    1. authenticate_user! 방법은
    2. SessionsController#new 프로세스 요청과에 전화 /users/sign_in 페이지로 리디렉션을 고안하는 응용 프로그램의 흐름입니다 SSO에서 /sso/create으로 사용자를 로그인하고 (요청시) 요청한 페이지로 리디렉션합니다.

    2 단계에서 URL을 /sso/new에 대한 매개 변수로 전달할 수 있으며 3 단계에서 해당 매개 변수가 다시 나에게 반환됩니다. 문제는 내가 SessionsController#new에있을 때 이미 손실되었다는 것입니다. 내가 가지고있는 것은 session[:user_return_to]이며 이미 iframe 중 하나에 대해 잘못된 값을 가지고 있습니다 (세션이 공유되고 경쟁 조건이 발생 함).

    소환장 오류를 통해 리퍼러를 전달할 수 있는지 궁금합니다. 필터 전에 authenticate_user!을 실행할 때 관리자 또는 매개 변수로 매개 변수를 전달할 후크가 있는지 확인할 수 없었습니다. 요청하는 동안 나는 리퍼러를 가지고 있지만 소장은 /users/sign_in으로 리다이렉트 할 때 그것을 지키지 않습니다.

  • 답변

    1

    관리자에게 맞춤형 오류 응용 프로그램을 사용하여이 문제를 해결할 수있었습니다.

    redirect_url에 request.original_fullpath을 사용했습니다. 여기

    내 고장 클래스입니다

    class CustomDeviseFailure < Devise::FailureApp 
        def redirect_url 
        if sso_enabled? 
         sso_path(return_to: request.original_fullpath) 
        else 
         super 
        end 
        end 
    
        def sso_enabled? 
        true 
        end 
    end