小编TKi*_*hvi的帖子

OAuth2和Drive API无法列出/检索文件

我有一个网络应用程序,需要列出我的Google云端硬盘中的所有文件,然后在点击时获取它们.我使用OAuth进行身份验证,它似乎工作(相同的代码适用于Calendar API).我在serviceAccountScopes中尝试了不同的范围但没有用.

基本认证是:

credential = new GoogleCredential.Builder().
setTransport(HTTP_TRANSPORT).
setJsonFactory(JSON_FACTORY).
setServiceAccountId(apiEmail).
setServiceAccountScopes(DriveScopes.DRIVE).
setServiceAccountPrivateKeyFromP12File(p12File).build();

credential.refreshToken();

service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).
setApplicationName("My API").build();
Run Code Online (Sandbox Code Playgroud)

编辑:我应该在refreshToken()调用之前添加该凭证的accessToken为null.

之后我尝试:

FileList files = service.files().list().execute();
Run Code Online (Sandbox Code Playgroud)

返回的FileList是(应该包含项目):

{"etag":"\"_U9FTLXcHskmKgrWAZqJlfW8kCo/vyGp6PvFo4RvsFtPoIWeCReyIC8\"","items":[],"kind":"drive#fileList","selfLink":"https://www.googleapis.com/drive/v2/files"}
Run Code Online (Sandbox Code Playgroud)

如果我检查selfLink的内容是:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
}
Run Code Online (Sandbox Code Playgroud)

每日限制不是问题.(我想这与此问题无关,因为:https://stackoverflow.com/a/10639679/2090125).此外,我在控制台中启用了Drive and Drive SDK(/sf/answers/723054741/ …

java oauth-2.0 google-drive-api

5
推荐指数
0
解决办法
1054
查看次数

Lambda 函数无权执行 apigateway:GET

我尝试从 Gateway api 使用 AWS-SDK 调用函数,但收到以下错误。

执行角色具有以execute-api:* 作为操作且资源为“*”的策略。

代码是:

const restApi = await new Promise((resolve, reject) => {
        apiGateway.getRestApi({restApiId: myRestApi}, function(err, data) {
Run Code Online (Sandbox Code Playgroud)

错误:

2020-06-06T08:58:47.741Z    d3e08e04-095c-41ec-bbe6-69344d53854c    INFO    getRestApi err AccessDeniedException: User: arn:aws:sts::123412341234:assumed-role/mydev-LambdaExecutionRole/mydev-api-FooFunctionsStack-AddFooFunction-123ASDF is not authorized to perform: apigateway:GET on resource: arn:aws:apigateway:eu-west-1::/restapis/xxx111yy
    at Object.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:51:27)
    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/rest_json.js:55:8)
    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
Run Code Online (Sandbox Code Playgroud)

网络设置应该没问题,lambda 位于 VPC 内,但它有公共子网来连接外部的服务。以前没有,并且 apiGateway.getRestApi 超时。

角色政策:

LambdaExecutionRole: 
    Type: AWS::IAM::Role
    Properties: 
      RoleName: 'MyRole'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement: 
          - Effect: Allow
            Principal: 
              Service: 
                - lambda.amazonaws.com
            Action: 
              - sts:AssumeRole …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-api-gateway

5
推荐指数
1
解决办法
9561
查看次数

Angular with Typescript和undefined注入服务的指令

我正试图从指令访问服务,但无论我做什么,它们似乎都是未定义的.MyDirective.factory()在初始化指令时表示未定义.在构造函数中也未定义(毫不奇怪).

我试图做这些说明同样无效:
http://blog.aaronholmes.net/writing-angularjs-directives-as-typescript-classes/
http://sirarsalih.com/2014/08/04/ 使用TypeScript和$ inject机制正确依赖注入你的angularjs-typescript-apps/
定义AngularJS指令

这是app.ts:

angular.module("fooTest", [])
    .service("myService", Foo.MyService)
    .directive("myDirective", Foo.MyDirective.factory());
Run Code Online (Sandbox Code Playgroud)

MyDirective.ts:

module Foo {
'use strict';

export class MyDirective implements ng.IDirective {

    private myService: any;

    //static $inject = ['myService'];

    constructor(service: MyService) {
        this.myService = service;
    }

    restrict = "E";
    replace = true;
    template = "<div ng-click='fooClick()'>foo: {{foo}}</div>";
    scope = {
        foo: "="
    };

    link = (scope, element, attrs) => {
        scope.fooClick = function () {
            this.myService.foo();
            scope.foo = this.myService.getBar();
        }
    };

    static factory() …
Run Code Online (Sandbox Code Playgroud)

angularjs typescript angularjs-directive

0
推荐指数
1
解决办法
5336
查看次数

使用自定义过滤器和订阅时未更新 ngFor 列表

我制作了一个搜索组件,它有一个输入字段,可以在输入时过滤搜索结果列表。我还有一个 websocket,可以将新的或更改的值推送到列表中,如下所示:

this._fooService.foos.subscribe(foos => {
    this.foos = foos;
});
Run Code Online (Sandbox Code Playgroud)

当我更改过滤器搜索词时没有过滤器和列表更新时,这很好用。在模板中,它很简单:

<div *ngFor="let foo of foos | filterFoos: searchTerm">
Run Code Online (Sandbox Code Playgroud)

我试过这样做:NgFor 不使用 Angular2 中的管道更新数据

但它没有奏效。我的另一个视图中有相同类型的带有条形的搜索组件,它与过滤器一起工作得很好。虽然有一个承诺,需要在 this.bars = bar 运行之前完成。


编辑:

_fooService.foos 是 Observable<Foo[]>并且在构造函数中初始化:

this.foos = this._fooObservable.asObservable(); 
Run Code Online (Sandbox Code Playgroud)

其中 _fooObservable 是 BehaviorSubject<Foo[]>并且使用 .next 方法(以及旧的 Foos)向其中添加新的 Foos。

过滤管是这样的:

@Pipe({name: 'filterFoos'})
export class FilterFoosPipe implements PipeTransform {

  transform = (foos: Foo[], searchTerm: string = ""): any => {
    let filtered = foos.filter((foo) => {
        return foo.name.toLowerCase().includes(searchTerm.toLowerCase())
    });
    return filtered;
  }
}
Run Code Online (Sandbox Code Playgroud)

rxjs angular

0
推荐指数
1
解决办法
1830
查看次数