javascript - 如何确保电子邮件只登录一次?
问题描述
我为特定范围的用户创建了一个小的 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}
- 适合您的用例并对其进行自定义。
参考:
推荐阅读
- pandas - 熊猫对过滤器有任何大小限制吗?
- tensorflow - 使用 GPU 进行预测比使用 CPU 慢得多?
- javascript - Vue:登录验证在我的代码中不起作用
- php - wp-admin/admin-ajax.php 404 在行动:发送附件到编辑器
- python - Tkinter 颜色瓷砖匹配游戏按钮错误
- python - 基于 Pandas 列的堆积条形图 - Python
- javascript - 将嵌套对象转换为 csv,其中最低属性的所有父对象在单独的行上可见
- tizen - 进度条在真实设备上没有动画
- python - Django - 为请求添加上下文以供视图使用
- c# - C# Linq OrderBy 反射与 . 分隔字符串