2016-12-30 104 views
1

我使用Google App腳本和Google Spreadsheet onOpen()觸發器。我在Google電子表格中鎖定了登錄用戶。Google應用腳本的Session.getActiveUser()不適用於跨域用戶

同樣的限制是它沒有記錄我在論壇上找到的跨域的電子郵件ID。

下面是相同的代碼:)從的OnOpen

function onOpen(e) 
{ 
    try 
    { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Action') 
    .addItem('Add Data', 'addData') 
    .addToUi() 

    var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Login Details"); 
    sheet.appendRow([Session.getActiveUser().getEmail(),new Date()]); 

    } 
    catch(e) 
    { 
    Logger.log(e); 
    } 
} 

一次觀測(功能:

1]我的電子表格的所有者,它只是記錄我們的公司域名的電子郵件ID 。 (電子表格的自動onOpen())

2]從其他域打開電子表格的有界腳本並運行onOpen()時,它會記錄登錄的用戶。

背後的原因是什麼,是否有任何解決方法爲用戶在跨域?

+0

你什麼意思「沒有登錄,我在論壇上找到跨域電子郵件ID」,論壇都有些什麼?並且在第二次觀察中,您說它記錄了登錄用戶,那麼問題是什麼?它記錄或不記錄電子郵件ID?是的,它只會提取登錄用戶。如果您想讓授權給腳本的用戶使用getEffectiveUser()。請解釋我提到的以上幾點。 –

+0

@ShyamKansagra:在StackOverflow和[鏈接](https://developers.google.com/apps-script/reference/base/session#getActiveUser())。假設我的域名是abc.com,而客戶域名是xyz.com,那麼功能在abc.com上正常工作。意思是當我用[email protected]登錄時,它會在「登錄詳情」工作表中記錄用戶名。但是,如果我用[email protected]登錄,那麼我會得到空白的用戶名。按照第二種觀察,當我用[email protected]登錄並打開腳本編輯器並運行onOpen時,它將電子郵件ID記錄爲[email protected],但是當直接打開電子表格時它不會。 –

+0

可能是因爲你一定忘記在[email protected]com上設置觸發器....請檢查一下,如果你已經在你的域中爲onOpen()設置了觸發器,那麼類似地,你也必須在客戶端ID上設置觸發器,觸發器不要使用代碼複製。 –

回答

0

我認爲Session.getActiveUser().getEmail()與外部域上的onOpen觸發器有問題,當該人不是所有者時。

此外,每分鐘自動觸發器也無法記錄活動用戶。

這裏的解決辦法:在電子表格本身

添加菜單,與點擊後,將運行功能追加所需的行的選項。因爲,當我們從腳本手動運行功能時,Session.getActiveUser().getEmail()正在工作。

使用此代碼:

function addMenu() 
{ 
    var ui = SpreadsheetApp.getUi(); 

    ui.createMenu('Log user') 
     .addItem('Run script', 'appendRow') 
    .addToUi() 
} 

,並添加此功能:只要你想登錄的活躍用戶,轉到登錄用戶並單擊運行

function appendRow() 
{ 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YOUR_SHEET").appendRow([Session.getActiveUser().getEmail(),new Date()]); 
} 

現在,腳本,它將追加行。

此外,不要忘記設置onOpen觸發器addMenu()函數在客戶端或甚至你的身邊。

有關詳細信息,我們可以看到這一點:Class session

+0

感謝您的解決方法,但我想在打開電子表格時登錄用戶。 –