users - Agregar detalles adicionales en la tabla de usuarios de Firebase
firebase user data (8)
Aquí hay una versión rápida. Su estructura de usuario ("tabla") es como
--users:
-------abc,d@email,com:
---------------email:[email protected]
---------------name: userName
etc.
Después de pasar la autenticación
FIRAuth.auth()?.createUser
, puede configurar los usuarios en la base de datos de la siguiente manera:
let ref = FIRDatabase.database().reference()
let rootChild = ref.child("users")
let changedEmailChild = u.email?.lowercased().replacingOccurrences(of: ".", with: ",", options: .literal, range: nil) // Email doesn''t support "," firebase doesn''t support "."
let userChild = rootChild.child(changedEmailChild!)
userChild.child("email").setValue(u.email)
userChild.child("name").setValue(signup.name)
Estoy trabajando en una aplicación firebase + angularjs y estoy usando la autenticación simple de correo electrónico y contraseña y funciona correctamente.
Me pregunto si puedo agregar datos de usuario adicionales en la tabla de usuarios que está utilizando la autenticación de correo electrónico + contraseña de Firebase, como si quisiera agregar información de facturación y otros detalles relacionados con el usuario sin crear un nodo / tabla adicional en Firebase para almacenar Estos datos adicionales.
Firebase almacena los usuarios de correo electrónico / contraseña en una ubicación separada, a la que no tiene acceso directo. No puede expandir los datos en esta ubicación.
Dado que muchos desarrolladores de aplicaciones desean acceder a los datos del usuario en su código de aplicación, es una práctica común almacenar todos los usuarios en un nodo
/users
dentro de la base de datos de la aplicación.
La desventaja es que debes hacerlo tú mismo.
Pero el lado positivo de esto es que puede almacenar cualquier información adicional si lo desea.
Consulte la guía de Firebase sobre el almacenamiento de datos de usuario para obtener un código de muestra. Desde allí:
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.onAuth(function(authData) {
if (authData && isNewUser) {
// save the user''s profile into Firebase so we can list users,
// use them in Security and Firebase Rules, and show profiles
ref.child("users").child(authData.uid).set({
provider: authData.provider,
name: getName(authData)
});
}
});
Firebase tiene un conjunto fijo de propiedades de usuario que se pueden actualizar pero no agregar.
Sin embargo, puede agregar pequeñas cantidades de datos con la ayuda de la serialización y deserialización utilizando
JSON.stringify() and JSON.parse()
Y luego use cualquiera de las propiedades no utilizadas para almacenar la cadena
ya sea en DisplayName o en la propiedad photoURL. Tenga en cuenta que los datos que se pueden agregar deben ser pequeños y almacenarse como una cadena.
Y esto solo puede ser posible con el uso del método en FIREBASE SDK y no con angularfire como se ilustra a continuación
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: "Jane Q. User",
photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(function() {
// Update successful.
}, function(error) {
// An error happened.
});
Puede almacenar más datos json como en la variable photoURL o DisplaYName en forma de cadena aquí.
La respuesta de Frank es buena, pero las cosas son un poco diferentes en Angular6 / Firebase5 / Angularfire5:
Aquí está mi controlador de clics para iniciar sesión en un usuario:
this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()).then((e) => {
console.log("Log-In Success" + e.additionalUserInfo.profile.name);
if (e.additionalUserInfo.isNewUser)
this.addUserToDatabase(/*...*/);
}).catch((error) => {
console.log("Log-In Error: Google Sign-In failed");
});
Mi respuesta no está relacionada con el ángulo, pero busqué un poco en silencio para averiguar cómo hacerlo usando Polymer y Polymerfire así que agrego esta respuesta para ayudar a las personas a hacerlo más rápido que yo.
Tuve que agregar un nodo separado a db como mencionó Frank van Puffelen.
Importaciones:
<link rel="import" href="../bower_components/polymerfire/firebase-app.html">
<link rel="import" href="../bower_components/polymerfire/firebase-auth.html">
<link rel="import" href="../bower_components/polymerfire/firebase-document.html">
Luego, coloque en cualquier lugar de su aplicación un
<firebase-app>
:
<firebase-app
name="yourAppName"
api-key= "{{yourApi}}"
auth-domain= "{{yourAuthDomain}}"
database-url= "{{yourDbUrl}}"
>
</firebase-app>
Después de eso, deberá usar
<firebase-auth>
y <
firebase-document>
:
Modelo :
<firebase-auth
id="auth"
app-name="yourAppName"
signed-in="{{signedIn}}"
user="{{user}}">
</firebase-auth>
<firebase-document
id="document"
app-name="yourAppName"
path="{{usersPath}}" // e.g "/users"
data="{{userDocument}}">
</firebase-document>
Guión:
this._register = function(){
var formValid = this.querySelector(''#register-form'').validate();
var auth = this.querySelector(''#auth'');
if(formValid && this.passWordsIdentic){
//The actual registration
auth.createUserWithEmailAndPassword(this.email, this.password).then(function(user){
console.log(''auth user registration succes'');
//Example values
this.userDocument.uid = user.uid;
this.userDocument.email = user.email;
this.userDocument.firstName = this.firstName;
this.userDocument.lastName = this.lastName;
this.userDocument.userName = this.userName;
this.$.document.save(this.usersPath).then(() => {
console.log("custom user registration succes");
this.$.document.reset();
});
}.bind(this)).catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
console.log(''error: '', errorCode);
);
}
}
Y eso es todo, es posible que desee echar un vistazo a este excelente Google Codelab, que es una buena introducción al uso de Firebase con polímero.
NOTA: Este método solo funciona si está usando Firebase Admin SDK y necesita tener un punto final en su servidor para administrar tokens personalizados
Firebase Admin SDK tiene una opción para crear tokens personalizados con objetos de reclamos adicionales, que pueden contener datos arbitrarios. Esto podría ser útil para almacenar información relacionada con el usuario, como si el usuario es usuario premium o no.
Se puede acceder a datos de reclamos adicionales utilizando el objeto de
auth
.
ejemplo
var uid = "some-uid"; //this can be existing user UID
var additionalClaims = {
premiumAccount: true,
some-user-property: ''some-value''
};
admin.auth().createCustomToken(uid, additionalClaims)
.then(function(customToken) {
// Send token back to client
})
.catch(function(error) {
console.log("Error creating custom token:", error);
});
Las reclamaciones
additionalClaims
también están disponibles en las reglas de seguridad de Firebase.
para obtener más información, lea los tokens personalizados de Firebase
Tenga en cuenta que el método se cambia en v4.0.0. Por lo tanto, debe usar el siguiente código para recuperar el perfil de usuario:
afAuth.authState.subscribe((user: firebase.User) => {
this.displayName = user.displayName;
this.email = user.email;
this.photoURL = user.photoURL;
});
Un usuario de Firebase tiene un conjunto fijo de propiedades básicas (una ID única, una dirección de correo electrónico principal, un nombre y una URL de foto) almacenados en la base de datos de usuarios del proyecto, que el usuario puede actualizar (iOS, Android, web). No puede agregar otras propiedades al objeto Usuario de Firebase directamente; en su lugar, puede almacenar las propiedades adicionales en su base de datos en tiempo real de Firebase.