2014-01-12 45 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>