我们构建了一个实现OAuth 2.0的RestFul API
现在我想使用Restangular和oauth-ng连接AngularJS前端
但是如何才能让双方就oauth令牌进行互动?
Oauth-ng应该处理登录/注销和令牌刷新。 Restangular应该从oauth-ng获取access_token以发送带有所有请求的令牌。
我当前的代码是这样实现的。
angular
.module('myapp', ['oauth','restangular'/* ... */ ])
.config(function ($routeProvider,$locationProvider,RestangularProvider,AccessToken) {
$routeProvider
.when('/access_token=:accessToken', {
template: '',
controller: function ($location, AccessToken) {
var hash = $location.path().substr(1);
AccessToken.setTokenFromString(hash);
console.log(AccessToken); //THIS WORKS
$location.path('/');
$location.replace();
}
})
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode({
enabled: true,
requireBase: true
}).hashPrefix('!');
RestangularProvider.setBaseUrl('https://myapi.local/');
// next line throws error
RestangularProvider.setDefaultHeaders({Authorization: 'Bearer ' + AccessToken.get()});
});
但此代码会抛出错误"未知提供商:AccessToken"。
似乎" AccessToken"尚未在配置阶段提供。 但我不想一次又一次地在每个控制器中实现这个通用功能。
连接两个模块的好方法是什么?
感谢您的帮助!
答案 0 :(得分:2)
AccessToken var不会在您使用它的范围内注入。 您是否尝试将令牌设置为Restangular设置到您履行承诺的位置。例如:
angular
.module('myapp', ['oauth','restangular'/* ... */ ])
.config(function ($routeProvider,$locationProvider,RestangularProvider) {
$routeProvider
.when('/access_token=:accessToken', {
template: '',
controller: function ($location, AccessToken) {
var hash = $location.path().substr(1);
AccessToken.setTokenFromString(hash);
RestangularProvider.setDefaultHeaders({Authorization: 'Bearer ' + AccessToken.get()});
console.log(AccessToken); //THIS WORKS
$location.path('/');
$location.replace();
}
})
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode({
enabled: true,
requireBase: true
}).hashPrefix('!');
RestangularProvider.setBaseUrl('https://myapi.local/');
});