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;
   210   211   212   213   214   215   216   217   218   219   220