2

それは奇妙です。このコードは Chromium でうまく機能します。認証 (oauth2) の後、Google クラウド エンドポイントにアクセスして情報をダウンロードします。ただし、一度 js に変換されて Chrome で開かれると、承認後にクラウド エンドポイントにアクセスすることはありません (Google アプリ エンジン ログから確認)。IE9 で開いた場合、認証ページも表示されません。どんな助けでも大歓迎です。

ソースコード: example.html

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>example</title>
    <link rel="stylesheet" href="example.css">
  </head>
  <body>
    <h1>example</h1>
 <div id="container">   
         <div id="title">
             <p>Hello!</p>    
          </div>    
          <div id="navigation">
              <p> first </p>            
          </div>
         <div id="content">
              <p> Content </p>            
         </div>
     <button id="login">Login</button>
</div>
    <script type="application/dart" src="example.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

たとえば .css

#navigation {

  float:left;
  color: #333;
  width: 200px;
  border: 1px solid #ccc;
  background-color: #fff;
  min-height: 20px;
  margin-bottom: 5px;
  box-sizing: border-box;
  padding: 5px;

}
#content {
 margin-left: 200px;
   width: 600px;
  height: 600px;

  border: 1px solid #ccc;
  background-color: #fff;
}

たとえば .dart

import 'dart:html';
import 'package:web_ui/web_ui.dart';
import "packages/dart_terminalendpoint_v1_api_client/lib/terminalendpoint_v1_api_browser.dart" as gdglib;
import "package:google_plus_v1_api/plus_v1_api_browser.dart" as pluslib;
import "package:google_oauth2_client/google_oauth2_browser.dart";
final CLIENT_ID = "----------.apps.googleusercontent.com";
final SCOPES = ["https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/plus.me"];

void main() {
  var auth = new GoogleOAuth2(CLIENT_ID, SCOPES);
  var gdg = new gdglib.Terminalendpoint(auth);
  var plus = new pluslib.Plus(auth);      
  var navigation = query("#navigation");
  var content = query("#content");
  var loginButton = query("#login");
  pluslib.Person me;

  void fetch() {
    gdg.makeAuthRequests=true;
    gdg.terminals.listTerminal().then((l) {
      navigation.text = "";
      if (l.items != null) {
        l.items.forEach((e) {
          var p = new ParagraphElement();
          p.text = " ${e.emailAddress}: ${e.location}";
          navigation.append(p);
        });
      }
    });
   }
  loginButton.onClick.listen((Event e) {
  fetch();
});

}

4

2 に答える 2

1

私は Discovery_api_client_generator を使用しましたが、うまく機能します。ただし、ライブラリ内の変数はfalseに設定されており、外部から変更する方法がないため、デフォルトでは認証しないように設定されています。ファイル client_base.dart で生成されたライブラリを手動で編集すると、以下の browser_client.dart のコードが「正しい」ことを実行します。つまり、authenticate を呼び出します。

if (makeAuthRequests && auth != null) {
  auth.authenticate(request).then((request) => request.send(body));
} else {
  request.send(body);
}
于 2014-07-10T00:43:16.637 に答える
1

こんにちは Vincent は最新バージョンでこの問題を解決しましたか? http://pub.dartlang.org/packages/discovery_api_client_generator

于 2013-03-29T01:38:36.607 に答える