0

레일즈 2.3으로 작성된 앱이 있습니다. 이 응용 프로그램은 인증을 위해 장치를 사용합니다. Worpdress와 같은 다른 프로젝트와 SSO를 만들 필요가 있습니다.2.3 ~ 3.2 앱 공유 세션

devise의 최신 버전에는 omniauth 지원이 포함되어 있으므로 중간 인증 앱을 인증 엔드 포인트로 만들어야합니다. 이 도구는 사용자의 유효성을 검사하고 사용자가 기록한 2.3 앱으로 리디렉션합니다. 나는 모든 구성이 필요했던 2.3 응용 프로그램

로그인 3.2 응용 프로그램에 2.3 응용 프로그램 => 요청 => OAuth를 외부 시스템 =>에

사용자 로그 :

는 흐름입니다. 기본적으로 앱이 세션을 공유 할 수 있도록 동일한 키와 비밀번호를 공유합니다.

Status: 500 Internal Server Error 
Session contains objects whose class definition isn\'t available. 
Remember to require the classes for all objects kept in the session. 
(Original exception: #{const_error.message} [#{const_error.class}]) 

나는이 오류가 내 세션이 2.3 응용 프로그램이 인스턴스화하는 방법을 알고하지 않는 몇 가지 클래스가 포함되어 의미 같아요 문제는 성공적인 loguin 후, 나는 2.3 응용 프로그램에서 다음과 같은 오류를 얻을 수있다. 나는 어떤 수업을 찾는지를 모른다.

+0

당신이 사용하는 어떤 세션 저장소 3.2? 2.3 앱에 아무것도 저장되어 있습니까? – mlibby

+0

두 앱에서 쿠키를 사용하고 있습니다. 둘 다 devise의 표준 정보를 사용해야합니다. – Seoman

답변

1

해결되었습니다. 문제는 3.2 레일 앱에 추가 된 플래시 메시지입니다. 이 메시지의 클래스는 ActionDispatch :: Flash :: FlashHash이고 2.3 앱의 클래스는 ActionController :: Flash :: FlashHash입니다.

제 경우의 해결책으로 set_flash_message 호출을 제거했습니다. 이제 3.2 => 2.3을 해결하면 어쩌면 3.2 앱으로 돌아갈 필요가있을 것입니다. 2.3 앱이 '잘못'클래스와 플래시 메시지를 추가 할 예정으로, 당신은 당신의 3.2 응용 프로그램에 새로운 클래스의 정의를 추가해야합니다

# config/initializers/session_store.rb 
module ActionController 
    module Flash 
    class FlashHash < Hash 
     def method_missing(m, *a, &;b) 
     end 
    end 
    end 
end 

참고 :

레일 3.2 => 2.3. This post

레일 2.3 =>This post