javascript - 从 chrome 扩展中获取唯一的 ClientID?

标签 javascript google-chrome google-chrome-extension

我正在开发 Chrome 扩展程序。我需要能够将每个客户识别为唯一的客户。

我无法将 guid 存储在 cookie 中,因为可以删除 cookie。我需要从系统本身读取一些独特的东西。

现在 - 我知道 JS 无法访问客户端资源(本地资源)但是 - 这是我的问题:

问题

chrome extensions Js 是否提供用于获取唯一客户端信息的 API(我不关心什么数据 - 只要它是唯一的)。

编辑:

澄清一下:

用户将看到一个唯一的 key (这是他计算机的哈希数据)。此代码将发送给我,我将提供匹配结果,用户将发送(通过电子邮件),只有这样 - 他才能使用扩展程序。

(不,并非所有国家都支持通过钱包进行延期付款,我在其中一个国家)

最佳答案

为了唯一标识用户,我建议生成一个随机 token 并将其存储在扩展程序的存储空间 (chrome.storage) 中。当存储中不存在 token 时,用户 ID 只需生成一次。

例如:

function getRandomToken() {
    // E.g. 8 * 32 = 256 bits token
    var randomPool = new Uint8Array(32);
    crypto.getRandomValues(randomPool);
    var hex = '';
    for (var i = 0; i < randomPool.length; ++i) {
        hex += randomPool[i].toString(16);
    }
    // E.g. db18458e2782b2b77e36769c569e263a53885a9944dd0a861e5064eac16f1a
    return hex;
}

chrome.storage.sync.get('userid', function(items) {
    var userid = items.userid;
    if (userid) {
        useToken(userid);
    } else {
        userid = getRandomToken();
        chrome.storage.sync.set({userid: userid}, function() {
            useToken(userid);
        });
    }
    function useToken(userid) {
        // TODO: Use user id for authentication or whatever you want.
    }
});

这个机制依赖于chrome.storage.sync , 还是比较靠谱的。此存储的 ID 只会在以下情况下丢失:

  • 用户重新安装扩展程序。卸载扩展程序时将清除本地存储。
  • 已超出其中一个存储配额(阅读 documentation )。
    这不会发生,因为唯一的写入操作发生在您的扩展程序的第一次运行时。
  • Chrome 的存储损坏,无法保存数据。
    即使用户没有启用 Chrome 同步,数据仍会保存在本地。 Chrome 的内部结构存在导致数据丢失的错误,但这些都是事故。
  • 用户已打开您的扩展页面的开发者工具并运行了 chrome.storage.sync.clear() 或类似的东西。
    您无法防止拥有破坏 Chrome 扩展程序内部知识的用户。

如果你想唯一标识一个用户,前面的方法就足够了。如果您真的想要获得基于硬件的 ID,请使用 chrome.storage.cpuchrome.storage.memory以及。不过,我看不出使用这些额外来源有任何好处,因为如果用户更换硬件,它们可能会发生变化,而且它们也不是唯一的(例如,两台相同的笔记本电脑会报告相同的值)。

关于javascript - 从 chrome 扩展中获取唯一的 ClientID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822170/

相关文章:

javascript - 如何从 Chrome 扩展后台脚本访问页面变量

javascript - ["var"+1]=someValue - 可以做这样的事情吗?

javascript - jQuery slider 避免调用事件太快

javascript - 使 Javascript 对象全局可用

javascript - 使用自动完成的值填充状态( react )

Javascript 访问 Disqus 评论文本框?

javascript - 为什么无法在我的本地 apache2 服务器中加载 js 文件?

google-chrome - console.info() 的 (i) 图标发生了什么变化?

google-chrome - Chrome 扩展将 html 注入(inject)特定的 div

google-chrome - 在 Ubuntu 中为 Google Chrome 禁用 AdBlock Plus 中的首次运行页面