我们正在尝试使用Angular 1.5和新的组件路由器位构建应用程序。我们遇到了一些边缘情况,我们想知道是否有任何解决方法。
我们想要使用http://mysite/#!/auth/#auth_token=xyz123
之类的网址(不受我们控制的结构,例如无法移除第二个哈希)和:
$location
提供auth_token值。 (它现在在它到达控制器之前被擦洗了。)我们的客户端有一个中央登录系统,他们使用的是IdentityServer v2。据我所知,当我们从IdSrv v2请求令牌时,它会通过将#auth_token=xyz123
附加到您的重定向网址来做出响应。当它认为你有my.com/login.html
时会被写回来,从而产生login.html#auth_token=xyz123
。
对于已经使用哈希的Angular应用程序,它会成为一个问题,因为URL最终会沿着mysite.com/#/auth#auth_token=xyz123
行。
正如您所料,这让Angular感到愤怒。我们还能找到一种方法让它在组件路由器下工作。
根据oauth-ng docs,如果我们使用未启用html5的旧路由器,我们会执行以下操作:
angular.module('app').config(function ($routeProvider) {
$routeProvider
.when('/access_token=:accessToken', {
template: '',
controller: function ($location, AccessToken) {
var hash = $location.path().substr(1);
AccessToken.setTokenFromString(hash);
$location.path('/');
$location.replace();
}
})
/access_token=:accessToken
包含=
,组件路由器似乎不允许。 [URL we define]#auth_token=xyz123
。 /**
,我们就可以从$location
检索令牌值。虽然这有点严重;我们想避免它。任何能够指引我们朝着正确方向发展的事情都将非常感激!
答案 0 :(得分:1)
为了跟进这一点:最后,我们认为这是一个奇怪的边缘案例,因此需要返回ui-router
。
虽然我们认为组件路由器最有意义,但不幸的是,这里的决定因素是我们没有100%控制我们的路由。路由约束包括边缘情况组件路由器似乎无法在当前处理。
对于那些使用较旧的oauth服务器系统的人,我希望这可以作为警告/一些背景,因为您选择了路由器。
希望ngComponentRouter将来会更好地支持这种边缘情况,但我不会责怪他们将其遗漏。