Page 215 - AngularJS权威教程
P. 215
18.14 AWSService 195
现在,可以继续处理AWSService,不用担心会覆盖我们的Role ARN。创建这个提供者能使 1
在不同应用之间分享变得非常容易,而不用每次都编写自定义的胶水代码。
至此,我们的AWSService还什么都没干。我们所需要做的最后一件事就是:确保是在给真 2
正登录的用户访问权。
这个最后的步骤就是,我们要告诉AWS库,有一个已认证用户能够作为IAM角色进行操作。 3
我们把这个凭证创建为promise,它最终会执行,这样,我们可以定义应用的不同部分,无
需为检验凭证是否已加载而烦恼 ,只需使用promise上的.then()方法。 4
我们来修改服务中的$get()方法:添加一个叫做setToken()的方法,它会创建一套新的
WebIdentityCredentials: 5
// ...
self.$get = function($q) { 6
var credentialsDefer = $q.defer(),
credentialsPromise = credentialsDefer.promise;
return {
credentials: function() { 7
return credentialsPromise;
},
setToken: function(token, providerId) { 8
var config = {
RoleArn: self.arn,
WebIdentityToken: token,
RoleSessionName: 'web-id' 9
}
if (providerId) {
config['ProviderId'] = providerId; 10
}
self.config = config;
AWS.config.credentials =
new AWS.WebIdentityCredentials(config); 11
credentialsDefer
.resolve(AWS.config.credentials);
} 12
}
}
// ...
13
现在,当我们通过登录Google获取oauth.access_token时,只需把id_token传递给这个函
数,它会负责AWS的配置设置。
14
我们用调用setToken的方法来修改UserService服务,如下所示:
// ... 15
.factory('UserService', function($q, $http) {
var service = {
_user: null, 16
setCurrentUser: function(u) {
if (u && !u.error) {
AWSService.setToken(u.id_token);
return service.currentUser(); 17
} else {
var d = $q.defer();
d.reject(u.error); 18
return d.promise;