1

我正在用Rails 5 API和ExtJs構建應用程序。 我的ExtJs單頁應用程序通過public/index.html加載。如何在通過Rails API與Oauth服務器進行身份驗證後返回到我的Js應用程序?

我通過ExtJs應用程序中的按鈕單擊按鈕,將其重定向到帶有所需參數的Oauth登錄頁面。

然後Oauth服務器調用我的Rails應用程序並通過身份驗證並獲取令牌。

所有工作正常。 我的問題是,現在我有我的用戶加載,更新,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 

我要麼會卡在與本地主機空的瀏覽器窗口:3000網址和代碼PARAM或者如果我重定向我得到一個消息,你將被重定向重新加載窗口,但我認爲參數不傳遞。

回答

0

我通常使用守門人gem創建OAuth服務器並將redirect_uri保存到會話[:return_to]。

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

認證後然後,注入的JavaScript

window.location = redirect_uri + params

或創建XMLHttpRequest到認證服務器,然後解析響應這樣的:

parseAccessToken: function(response) { 
    return { 
     accessToken: response.match(/access_token=([^&]*)/)[1], 
     expiresIn: response.match(/expires=([^&]*)/)[1] 
    }; 
} 
相關問題