我在AngularJS中使用ui-router开发了一个前端。要从后端使用REST API,我需要获得OAuth2访问令牌(隐式授权)。
我的问题在于OAuth舞蹈的最后一步,当我从网址中的身份验证服务器获取访问令牌时
mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&...
显然, mydomain.com/home
是重定向URI。
重定向后只需几分之一秒,AngularJS会更改类似
的URLmydomain.com/#/my-default-view
因此,访问令牌将从URL中删除。
现在有一些事情:
mydomain.com/#/auth-complete/
之类的内容 $routeProvider.otherwise('/')
。$locationProvider.html5Mode(true);
以删除中间的'#',但问题是相同的(重定向后URL和访问令牌会立即删除)。$http
拦截器,但这对于这个常见任务来说听起来有点太多了不是吗? 有什么建议吗?
答案 0 :(得分:5)
这个适用于Google,作为客户端应用程序的OAuth2提供程序:
$urlRouterProvider.otherwise('/');
$stateProvider.state('access_token', {
url: '/access_token={accessToken}&token_type={tokenType}&expires_in={expiresIn}',
template: '',
controller: function($stateParams) {
var token = $stateParams.accessToken;
// do something usefull with token
}
})
答案 1 :(得分:0)
我不再使用ui-router
,但对于那些仍需要解决方法的人,您只需要在正则表达式中捕获令牌。从the documentation开始,您可以执行类似
.state('oauth.token', {
url: "/o/#{authToken:[0-9a-zA-Z]+}",
...
})
并在authToken
中获取您的访问令牌。