我正在开发 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.cpu
和 chrome.storage.memory
以及。不过,我看不出使用这些额外来源有任何好处,因为如果用户更换硬件,它们可能会发生变化,而且它们也不是唯一的(例如,两台相同的笔记本电脑会报告相同的值)。
关于javascript - 从 chrome 扩展中获取唯一的 ClientID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822170/