Estoy tratando de desarrollar un pago con pago (usando paypal) para obtener el plan pago de un bot de discordia. Luego, cuando el usuario paga, el niño "prem" se establece en verdadero, así:
paypal.Buttons({ style: { color: 'blue', shape: 'pill' }, createOrder:function (data, actions){ return actions.order.create({ purchase_units: [{ amount:{ value: '1.00' } }] }); }, onApprove:function (data, actions){ return actions.order.capture().then(function (details){ console.log(details) database.ref('server/' + guildId + '/prem').set(true); //here }) } }).render('#paypal-payment-button');El problema es que mi base de datos en tiempo real no tiene reglas de seguridad (acepta todas las solicitudes):
{ "rules": { ".read": true, ".write": true, } }Esta es mi estructura de base de datos:
{ "server": { "858941532694118431": { "prem": true, //premium plan activated "settings": { "error": "on", "warnings": "on" } } } }Como mis reglas dan acceso a todos, cada usuario podría escribir esto en la consola para activar el premium sin pagar:
database.ref('server/' + serverId + '/prem').set(true);¿Cómo podría configurar mis reglas de seguridad para que ningún usuario pueda modificar a ese niño pero solo el sistema automático puede hacerlo? ¿Hay una manera?
No debería permitir que los usuarios actualicen el prem en primer lugar. Incluso si permite que los usuarios actualicen su propia membresía, aún pueden convertirla en true sin el pago de Paypal.
En su lugar, intente usar Webhooks de Paypal que pueden activar una función HTTP Cloud cada vez que se recibe un pago y cambiar el estado premium del usuario desde la función Cloud después de validar el pago.
Sin embargo, incluso si quisiera escribir en la base de datos directamente, el ID del servidor no parece ser el UID predeterminado de Firebase Auth. Si ese no es el UID del usuario, será difícil implementar reglas para él.
{ "rules": { "server": { "$uid": { ".write": "$uid === auth.uid" } } } } Estas reglas permitirán que un usuario con UID 1234 edite /server/1234/ solo la ruta.
Dado que la ID es la ID del gremio de Discord, será mejor usar un webhook. Puede usar Firebase Cloud Function y configurar su URL como URL de entrega de webhook en Paypal. El webhook debe contener información adicional sobre la transacción e incluso puede incluir algunos metadatos, como la identificación del gremio, si es necesario. Valide el pago y actualice su base de datos según sea necesario.
Asegúrese de que las reglas estén configuradas en ".write": false para que ningún usuario pueda actualizar ese estado directamente.