Creé una pequeña extensión de Chrome para un alcance específico de usuarios. ¿Cómo puedo asegurarme de que un usuario haya iniciado sesión solo en una máquina para evitar compartir la extensión sin que los usuarios paguen por ella?
¿Hay alguna manera de hacerlo?
Con otras aplicaciones, compruebo el UUID y lo comparo con mi lista de usuarios.
Me cuesta entender la API de identificación tbh.
Este es mi camino actualmente, pero solo rastrea si el usuario está en mi lista. Está dentro de mi archivo popup.JS, por lo que se activa cuando los usuarios hacen clic en el ícono de la extensión.
Editar:
(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; } }); })();Tenga en cuenta que mi respuesta se basa en mi opinión. Siéntase libre de usar otra respuesta si me equivoqué.
Supongo que tiene un servidor en el que utiliza como base de datos principal de su extensión de Chrome.
Entonces, mirando su caso de uso, si yo fuera usted, intentaría implementar un almacén de datos con estado como Redis para almacenar / almacenar en caché los 'estados' de los usuarios registrados. Cuando un usuario inicia sesión, almacenaré su correo electrónico en una estructura de datos fácil de obtener (preferiblemente con una complejidad O(1) ). Si ese usuario intenta iniciar sesión con otra máquina, se detectará fácilmente en el almacén de datos y no podrá usar la extensión en esa máquina, hasta que el usuario cierre la sesión en la máquina anterior. Incluso puede invalidar una sesión en su backend si lo desea.
¿Por qué elegí Redis? Es porque es un almacén de datos estrictamente diseñado para aplicaciones de alto rendimiento. Principalmente, se usa para almacenar en caché sesiones y estados, pero también puede usarlo como una base de datos convencional sin mucho esfuerzo.
Un ejemplo de implementación:
Redis tiene una estructura de datos que se ajusta fácilmente a los criterios anteriores. Se llama conjunto. Set es una estructura de datos que solo permite elementos únicos.
Si un usuario inicia sesión.
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> Los comandos se explican por sí mismos, SADD es para agregar un miembro a un conjunto, SREM para eliminarlo y SISMEMBER devolverá un valor booleano ya sea que el value exista en el conjunto o no. ¡Perfecto para la gestión de sesiones!
¡También puede usar varias combinaciones de estructuras de datos para adaptarse mejor a su caso de uso!
Como usar hashes, por ejemplo:
Básicamente, es como una estructura de datos de objetos en JavaScript. Digamos que este es el comando que se ejecutará en Redis después de que el usuario inicie sesión.
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}Referencias: