1

레일 5 API 및 ExtJs로 응용 프로그램을 빌드하고 있습니다. 내 ExtJs 단일 페이지 응용 프로그램은 public/index.html을 통해로드되었습니다.Rails API를 통해 Oauth 서버로 인증 한 후 Js App으로 돌아 오는 방법은 무엇입니까?

ExtJs 앱의 버튼 클릭을 통해 필요한 매개 변수가있는 Oauth 로그인 페이지로 리디렉션됩니다.

그런 다음 Oauth 서버가 내 Rails App을 호출하고 인증을 거쳐 토큰을 다시받습니다.

모두 정상적으로 작동합니다. 내 문제는 이제 내 사용자로드, 업데이트, access_token 준비가되어 있지만 브라우저에서 단일 페이지 응용 프로그램을로드하고 access_token을 전달해야한다는 것입니다. 어떻게 든 나는 이것을 관리 할 수 ​​없다.

def login 
if params[:code] 
    response = request_token(params[:code]) 

    if response.header.code == '200' 
    token_data = JSON.parse response.body 

    user_info = JWT.decode(token_data['id_token'],nil,false).first 
    @user = User.find_by email: user_info['email'] 
    @user ? @user : @user = User.new 

    @user.name = "#{user_info['given_name']} #{user_info['family_name']}" 
    @user.access_token = token_data['access_token'] 
    @user.access_token_created_at = Time.zone.now 
    @user.token_data = response.body 
    @user.save 


    render file: '/public/index.html' 
    else 
    redirect_to('/', status: response.header.code, alert: response.header.message) 
    end 
elsif params[:error] 
    redirect_to('/', status: 401, alert: params[:error]) 
end 
end 

I 중 하나가 로컬 호스트와 빈 브라우저 창에 박히 : 나는 당신이 창을 다시로드가 리디렉션되고있다와 내가 메시지가 리디렉션하지만 경우 3000 URL과 코드 PARAM 아니면 매개 변수가없는 생각 전달.

답변

0

나는 보통 OAuth 서버를 만들고 세션 [: return_to]에 redirect_uri를 저장하기 위해 문지기 보석을 사용합니다.

resource_owner_authenticator do 
    session[:return_to] = request.fullpath 
    current_user || redirect_to(new_user_session_url) 
end 

다음 인증 후, 스크립트

window.location = redirect_uri + params

주입 OR 서버 인증 관련 XMLHttpRequest 객체를 생성하고,이 같은 반응 분석 :

parseAccessToken: function(response) { 
    return { 
     accessToken: response.match(/access_token=([^&]*)/)[1], 
     expiresIn: response.match(/expires=([^&]*)/)[1] 
    }; 
} 
관련 문제