2014-01-12 52 views
8

我想創建一個簡單的應用程序使用AngularJS和谷歌的OAuth2身份驗證。AngularJS和谷歌OAuth2 redirect_uri

由於彈出窗口阻止問題和手機友好性,我決定不使用Google APIs Client Library for JavaScript

這讓我可以選擇在google上完全重定向到OAuth2 endpoint,並通過access_token將用戶重定向回我的應用。

我認爲這會工作得很好。重定向URI將爲'http://myapp.com/#/register',並帶有附加的'access_token'查詢參數。然後,我會使用access_token並將用戶引導到我應用程序中的其他位置。

這不起作用,因爲Google API憑證(http://developers.google.com/console)不喜歡在重定向URI中包含'#'。

然後我嘗試用

$locationProvider.html5Mode(true); 

這也不起作用關閉中的URI中「#」的要求,因爲明確地瀏覽(在Chrome中)爲「http://myapp.com/register」不是我的角路線認可。

有關我該如何實現這一目標的想法?

+0

您是否在您的web服務器上使用url重寫將http://myapp.com/register重寫爲http://myapp.com/? – alexp

+0

不,我不是,只是使用裸機IIS(儘管IIS可以獲得裸機:P) – mortware

+0

好像你應該嘗試一下 - 以便瀏覽到http://myapp.com/register確實可行。然後,您的Angular應用程序會將/ register映射到正確的路線。讓您的應用可以深入鏈接的額外優勢。 – alexp

回答

0

以下工作適合我,html5模式設置爲true在我的應用程序。

這個代碼進入你的控制器重定向頁面(確保注入$窗口服務):

//Get parameters from hash fragment 
var params = {}; 
if ($window.location.hash.indexOf('#') === 0) { 
    var regex = /([^&=]+)=([^&]*)/g, m; 
    while (m = regex.exec($window.location.hash.substr(1))) { 
     params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); 
    } 
} 

//Validate params, store access token etc. 
if (!params.access_token) { 
    //... 
} 

如果您的應用程序不能識別非#路線,確保你的服務器啓用了重寫引擎,並將所有相關請求重定向到角應用程序主HTML文件。

0

如果您使用IIS,則可以安裝URL Rewrite擴展名。然後更新你的web.config文件。例如,下面的配置會將所有內容重定向到您的Angular應用程序,並讓它處理路由。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Angular Default" stopProcessing="true"> 
        <match url="(.*)" /> 
        <action type="Rewrite" url="index.html" logRewrittenUrl="true" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration>