usuario seguridad firebase firebase-database firebase-authentication

usuario - firebase seguridad



La forma correcta de mantener nombres de usuario Ășnicos y datos de perfil adicionales en Firebase (1)

Estoy intentando crear un almacén de datos separado para nombres de usuario únicos y datos de perfil adicionales como avatar, etc. Tengo el siguiente esquema:

mydatabase : { users: [{ <actual user''s id>: { username: "helloworld" }, <actual user''s id>: { username: "2test" }] }

¿Mi enfoque es correcto en esto? No vi una forma en firebase para almacenar nombres de usuario o datos de usuario adicionales en los registros de autenticación de firebase. También noté que la mayoría de los ejemplos que encuentro en línea generan una clave de inserción para cada fila de datos, pero aquí estoy usando la identificación del usuario real en lugar de una tecla de inserción. Finalmente quiero consultar esto cuando un usuario intente crear un nombre de usuario para ver si ya se ha tomado.


Usaría el mismo enfoque que estás usando. Estoy de acuerdo en que tiene sentido utilizar el ID de usuario como la clave en lugar de un índice pushId ya que, como usted señala, querrá consultar los datos más adelante.

El único desafío potencial de usar esta estructura es que si desea que los usuarios elijan un nombre de usuario en el momento en que se crea, no tendrán acceso de lectura a la base de datos, por lo que no podrán verificar si el nombre de usuario es único. Siempre y cuando esté bien crear un usuario primero y luego hacer que elija un nombre de usuario una vez autenticado, esto no será un problema. Si prefiere que primero elijan un nombre de usuario, entonces podrían usar Cloud Functions for Firebase con un activador HTTP y pasar el nombre de usuario como parte de la solicitud. La solicitud incluiría una consulta del nombre de usuario dado y la respuesta sería si el nombre de usuario está disponible o no. Podría verse algo como esto:

const functions = require(''firebase-functions''); const admin = require(''firebase-admin''); admin.initializeApp(functions.config().firebase); exports.uniqueUsername = functions.https.onRequest((req, res) => { const username = req.query.username admin.database().ref(''users'').orderByChild(''username'').equalTo(username)once(''value'').then(snap => { // if the child exists, then the username is taken if (snap.exists()) { res.send(''username not available''); } else { res.send(''username available''); } }) }