Ajouter des détails supplémentaires sur la Table D'utilisateur Firebase
je travaille sur une application firebase+angularjs et j'utilise l'authentification simple par e-mail et mot de passe et cela fonctionne correctement.
je me demande juste si je peux ajouter des données utilisateur supplémentaires sur la table d'utilisateur qui est utilisée par firebase email+password auth, comme je veux ajouter des informations de facturation et d'autres détails concernant l'utilisateur sans créer de noeud/table supplémentaire sur firebase pour stocker ces données supplémentaires.
8 réponses
Firebase stocke les utilisateurs de Courriel/Mot de passe dans un endroit séparé, auquel vous n'avez pas accès directement. Vous ne pouvez pas étendre les données dans cet endroit.
puisque de nombreux développeurs d'applications veulent accéder aux données de l'utilisateur dans leur code d'application, c'est une pratique courante de stocker tous les utilisateurs sous un /users
noeud à l'intérieur de la base de données de l'application elle-même. L'inconvénient est que vous devez le faire vous-même. Mais le côté positif de cette est que vous pouvez stocker toutes les informations supplémentaires si vous le souhaitez.
Voir la Firebase guide de l'utilisateur de stockage de données pour le code échantillon. À partir de là:
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 a un ensemble fixe de propriétés utilisateur qui peuvent être mises à jour mais pas ajoutées.
cependant vous pouvez ajouter de petites quantités de données avec l'aide de la sérialisation et de la desérialisation en utilisant JSON.stringify() and JSON.parse()
et ensuite utiliser n'importe laquelle des propriétés inutilisées pour stocker la chaîne
soit dans DisplayName, soit dans la propriété photoURL. Gardez à l'esprit que les données peuvent être ajoutés doit être de petite taille et stockées sous forme de chaîne.
Et cela peut être seulement possible avec l'utilisation de la méthode dans la base de données SDK et non l'angularfire comme illustré ci-dessous
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.
});
vous pouvez stocker plus de données de type json dans la variable photoURL ou displaYName sous forme de chaîne ici.
NOTE: Cette méthode ne fonctionne que si vous utilisez le SDK Admin Firebase et que vous avez besoin d'un point final sur votre serveur pour gérer les tokens personnalisés
Firebase Admin SDK a une option pour créer des tokens personnalisés avec des objets claims supplémentaires, qui peuvent contenir des données arbitraires. Cela peut être utile pour stocker des infos, comme si l'utilisateur est un utilisateur premium ou pas.
les données supplémentaires sur les revendications sont accessibles à l'aide de auth
objet.
exemple
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);
});
additionalClaims
sont également accessibles dans les règles de sécurité Firebase.
pour plus d'informations, lisez Firebase Jetons Personnalisés
un utilisateur Firebase a un ensemble fixe de propriétés de base-une ID unique, une adresse e-mail primaire, un nom et une URL de photo-stockées dans la base de données de l'utilisateur du projet, qui peuvent être mises à jour par l'utilisateur (iOS, Android, web). Vous ne pouvez pas ajouter d'autres propriétés à L'objet utilisateur Firebase directement; à la place, vous pouvez stocker les propriétés supplémentaires dans votre base de données Firebase en temps réel.
Ma réponse n'est pas angulaire relative mais j'ai cherché calme un peu pour trouver comment le faire en utilisant Polymère et Polymerfire alors j'ajoute cette réponse pour aider les gens à faire plus vite que moi.
J'ai dû ajouter un noeud séparé à db comme L'a mentionné Frank van Puffelen.
Importations:
<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">
puis placez n'importe où dans votre application a <firebase-app>
composant:
<firebase-app
name="yourAppName"
api-key= "{{yourApi}}"
auth-domain= "{{yourAuthDomain}}"
database-url= "{{yourDbUrl}}"
>
</firebase-app>
après cela, vous devrez utiliser <firebase-auth>
et < firebase-document>
:
Modèle :
<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>
Script:
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);
);
}
}
Et voilà, vous voudrez peut-être prendre un coup d'oeil à cet excellent google codelab ce qui est une bonne introduction à l'utilisation de firebase avec polymer.
Voici une version rapide. Votre structure d'utilisateur ("table") est comme
--users:
-------abc,d@email,com:
---------------email:abc.d@email.com
---------------name: userName
etc.
Après vous passez la auth FIRAuth.auth()?.createUser
vous pouvez définir les utilisateurs dans la base de données comme ci-dessous:
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)
veuillez noter que la méthode est modifiée en v4.0.0. Par conséquent, vous devez utiliser le code ci-dessous pour récupérer le profil de l'utilisateur:
afAuth.authState.subscribe((user: firebase.User) => {
this.displayName = user.displayName;
this.email = user.email;
this.photoURL = user.photoURL;
});
la réponse de Frank est bonne, mais les choses sont un peu différentes en Angular6 / Firebase5/Angularfire5:
Voici mon gestionnaire de clic pour la signature d'un utilisateur:
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");
});