我有一个使用ui-router在AngularJS中开发的前端.消费从后端我需要得到OAuth2用户访问令牌(隐补助金)的REST API.
我的问题就出在OAuth舞蹈的最后一步,当我得到了从接入认证服务器令牌回到网址
mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&...
Run Code Online (Sandbox Code Playgroud)
mydomain.com/home 显然是重定向URI.
重定向后只需几分之一秒,AngularJS会更改URL
mydomain.com/#/my-default-view
Run Code Online (Sandbox Code Playgroud)
因此,访问令牌从URL中删除.
现在有几件事:
mydomain.com/#/auth-complete/会不会好起来的.$routeProvider.otherwise('/').$locationProvider.html5Mode(true);中间删除'#',但问题是相同的(重定向后URL和访问令牌立即被删除).$http拦截器,但这对于这个常见任务听起来有点太多了不是吗?有什么建议?
小智 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
}
})
Run Code Online (Sandbox Code Playgroud)
我不再使用ui-router,但对于那些仍然需要解决方法的人来说,您只需在正则表达式中捕获令牌即可。从文档中,您可以执行类似的操作
.state('oauth.token', {
url: "/o/#{authToken:[0-9a-zA-Z]+}",
...
})
Run Code Online (Sandbox Code Playgroud)
并获取您的访问令牌authToken。