2013-10-08 28 views
0

我有一個Youtube分析電子表格修改了腳本IT這一集!Apps腳本 - 存儲刷新令牌而不是項目屬性

http://www.youtube.com/watch?v=VVhsK5jH6u8

有沒有一種方法來存儲刷新令牌,而不是訪問令牌,以便電子表格可以有持續性的訪問?我從OAuth Playground獲取了刷新令牌,但僅使用刷新令牌替換訪問令牌似乎不起作用。 許多人使用這個電子表格,如果可能的話,我想避免每小時認證。

謝謝!

回答

1

看看這裏這個代碼示例 - https://github.com/entaq/GoogleAppsScript/blob/master/IO2013/YouTubeAnalytics/oauth2.gs

到期時,我提高了OAuth的庫有自動刷新令牌。這種方式非常具有可擴展性,您不必「引導」並存儲任何內容。

重要位 -

function attemptTokenRefresh_() { 
    var refreshToken = UserProperties.getProperty(refreshTokenPropertyName); 
    if (!refreshToken) { 
    Logger.log('No refresh token available to refresh with ' + tokenKey); 
    return false; 
    } 
    var requestData = { 
    method: 'post', 
    payload: { 
     client_id: CLIENT_ID, 
     client_secret: CLIENT_SECRET, 
     refresh_token: refreshToken, 
     grant_type: 'refresh_token' 
    } 
    }; 
    Logger.log('Attempting token refresh'); 
    var response = UrlFetchApp.fetch(TOKEN_URL, requestData).getContentText(); 
    storeOAuthValues_(response); 
    return true; 
} 

function storeOAuthValues_(response){ 
    var tokenResponse = JSON.parse(response); 

    var accessToken = tokenResponse.access_token; 
    // expires_in is in seconds and Date.now is ms 
    var endMs = Date.now() + tokenResponse.expires_in * 1000; 
    var refreshToken = tokenResponse.refresh_token; 


    //store the token for later retrival 
    UserProperties.setProperty(oauthTokenPropertyName, accessToken); 
    if (refreshToken) { //on a refresh call we wont get a new refresh token, lets not wipe prev one out 
    UserProperties.setProperty(refreshTokenPropertyName, refreshToken); 
    } 
    UserProperties.setProperty(oauthTokenExpiresPropertyName, endMs); 
} 
+0

阿倫,感謝您對這個幫助。 – MonsterWimp757

+0

阿倫,謝謝你對此的幫助。我似乎沒有從我的請求中獲得刷新令牌。我處於/ youtubepartner範圍之內,我可以在OAuth Playground上獲得一個範圍。我只獲取訪問令牌和到期日。當我登錄迴應時,我也沒有看到刷新令牌。 – MonsterWimp757

+0

當您要求對作用域進行身份驗證時,請確保包含'&access_type = offline'。 –