簡體   English   中英

如何確保電子郵件只登錄一次?

[英]How to make sure the email is logged in only once?

我為特定范圍的用戶創建了一個小的 chrome 擴展。 如何確保用戶僅在一台機器上登錄以避免在用戶不付費的情況下共享擴展?

有什么辦法嗎?

使用其他應用程序時,我會檢查 UUID 並將其與我的用戶列表進行比較。

我很難理解識別 API tbh。

這是我目前的方式,但它只跟蹤用戶是否在我的列表中。 它在我的 popup.JS 文件中,因此當用戶單擊擴展圖標時它會被觸發。

編輯:

(function () {
    chrome.identity.getProfileUserInfo({ 'accountStatus': 'ANY' }, async function (info) {
        email = info.email;
        console.log(info.id);

        let response = await fetch('https://pastebin.com/');
        let data = await response.text();

        console.log(data.indexOf(info.id));

        if (info.id === '') {
            chrome.browserAction.setPopup({ popup: 'index.html' });
            alert(info.id);
        } else if (data.indexOf(info.id) !== -1) {
            console.log('License is valid');
        } else {
            chrome.browserAction.setPopup({ popup: 'index.html' });
            alert(info.id);

            // block chrome extension usage;
        }
    });
})();

請注意,我的回答是基於我的意見。 如果我碰巧錯了,請隨意使用另一個答案。

我假設您有一台服務器,您將其用作 Chrome 擴展程序的主數據庫。

所以,看看你的用例,如果我是你,我會嘗試實現像 Redis 這樣的有狀態數據存儲,以便存儲/緩存登錄用戶的“狀態”。 當用戶登錄時,我會將他們的電子郵件存儲在易於獲取的數據結構中(最好具有O(1)復雜度)。 如果該用戶嘗試使用另一台機器登錄,則很容易在數據存儲中檢測到,並且您無法在該機器上使用擴展程序 - 直到該用戶在之前的機器上注銷。 如果您願意,您甚至可以使后端中的會話無效。

我為什么選擇Redis? 這是因為它是專為高性能應用程序設計的數據存儲。 大多數情況下,它用於緩存會話和狀態,但您也可以毫不費力地將其用作傳統數據庫。

一個實現示例:

  • Redis 的數據結構很容易滿足上述標准。 這叫做集。 Set 是一種只允許唯一元素的數據結構。

  • 如果用戶登錄。

akasha@Akashas-MacBook-Pro redis> % SADD auth <user_email>
  • 如果用戶退出。
akasha@Akashas-MacBook-Pro redis> % SREM auth <user_email>
  • 如果用戶嘗試從另一台機器登錄。
akasha@Akashas-MacBook-Pro redis> % SISMEMBER auth <user_email>
  • 這些命令是不言自明的, SADD是將成員添加到集合中, SREM是刪除, SISMEMBER將返回一個布爾值,無論該集合中是否存在該value 完美的會話管理!

  • 您還可以使用多種數據結構組合來更全面地適應您的用例!

例如使用散列:

基本上,它就像 JavaScript 中的對象數據結構。 假設這是用戶登錄后將在 Redis 中執行的命令。

akasha@Akashas-MacBook-Pro redis> % HSET authentication:{user_email} email <user_email>
  • 如果用戶注銷,那么它也非常簡單。
akasha@Akashas-MacBook-Pro redis> % DEL authentication:{user_email}
  • 如果用戶嘗試從另一台機器訪問:
akasha@Akashas-MacBook-Pro redis> % HEXISTS authentication:{user_email}
  • 適合您的用例並對其進行自定義。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM