2014-11-21 33 views
1

我在玩與谷歌驅動器的API,我也知道,如果我需要做的代碼每個我需要使用API​​時間波紋管:googleapi_auth,它是如何工作的?

import "package:googleapis_auth/auth_browser.dart" as gauth; 
import "package:googleapis/drive/v2.dart" as drive; 
... 
    var clientid = new gauth.ClientId("xxx.apps.googleusercontent.com", null); 
    var scope = [drive.DriveApi.DriveScope]; 

    gauth.createImplicitBrowserFlow(clientid, scope).then((gauth.BrowserOAuth2Flow flow) { 
    flow.clientViaUserConsent().then((gauth.AutoRefreshingAuthClient client) { 
     var drive_api = new drive.DriveApi(client); 
     // My code here. 
     }).catchError((e) => print(e)); 
    }); 
... 

一旦客戶變種產生的,沒有辦法恢復它,而不是每次都做這些代碼行?

+0

沒有nowing谷歌的權威性API是如何工作的 - 你應該能夠重用使用OAuth生成會話。一般來說,OAuth應該爲您提供令牌或其他可以保存爲持久數據的數據。這通常應該是可行的,並且如果可以保存/讀取永久存儲的會話,則應該檢查包。 – Robert 2014-11-21 12:17:33

回答

2

我親自將全局變量(在內存中)保存在變量中,並將其重用到我的應用程序中(即我的web應用程序,所以是當它重新加載頁面時它會再次運行)。有些錯誤(我猜當令牌需要刷新時,或者權限被撤銷時)可能需要您重新運行整個流程。我認爲,關鍵是該頁面通過這樣做,你的「drive_api」變量將被加載,如果用戶已經在以前的會議獲准加載

flow.clientViaUserConsent(immediate: true) 

後運行「靜默」。例如,我通常會啓用一些按鈕在這一點上

,如果失敗(我有時會添加一個「登錄按鈕」),顯式調用(做得更好,關於「上單擊」允許彈出窗口出現)

flow.clientViaUserConsent() 

一些文檔爲眼前的參數:

/// If [immediate] is `true` there will be no user involvement. If the user 
/// is either not logged in or has not already granted the application access, 
/// a `UserConsentException` will be thrown. 
/// 
/// If [immediate] is `false` the user might be asked to login (if he is not 
/// already logged in) and might get asked to grant the application access 
/// (if the application hasn't been granted access before). 
相關問題