Подтвердить что ты не робот

Добавить дополнительные сведения о таблице пользователей Firebase

Я работаю над приложением firebase + angularjs, и я использую простую аутентификацию по электронной почте и паролю, и он работает нормально.

Мне просто интересно, могу ли я добавить дополнительные пользовательские данные в пользовательскую таблицу, которая используется firebase email + password auth, например, я хочу добавить информацию о платежах и другие сведения о пользователе без создания дополнительных node/таблицу на firebase для хранения этих дополнительных данных.

4b9b3361

Ответ 1

Firebase хранит пользователей электронной почты/паролей в отдельном месте, к которому у вас нет прямого доступа. Вы не можете расширять данные в этом месте.

Поскольку многие разработчики приложений хотят получить доступ к пользовательским данным в своем коде приложения, общепринятой практикой является сохранение всех пользователей под /users node внутри самой базы данных приложения. Недостатком является то, что вы должны сделать это сами. Но положительная сторона этого заключается в том, что вы можете хранить любую дополнительную информацию, если хотите.

См. Руководство Firebase по хранению пользовательских данных для примера кода. Оттуда:

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.onAuth(function(authData) {
  if (authData && isNewUser) {
    // save the user 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)
    });
  }
});

Ответ 2

Firebase имеет фиксированный набор пользовательских свойств, которые могут быть обновлены, но не добавлены.

Однако вы можете добавить небольшие объемы данных с помощью сериализации и десериализации с помощью JSON.stringify() and JSON.parse()

И затем используйте любое из неиспользуемых свойств для хранения строки

либо в DisplayName, либо в свойстве photoURL. Имейте в виду, что данные, которые могут быть добавлены, должны быть небольшими по размеру и сохраняться в виде строки.

И это может быть возможно только с использованием метода в FIREBASE SDK, а не с угловым огнем, как показано ниже.

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.
});

Вы можете хранить больше json-подобных данных в переменной photosURL или moveaYame в виде строки здесь.

Ответ 3

Мой ответ не связан с angular, но я немного искал, чтобы узнать, как это сделать, используя Polymer и Polymerfire, поэтому я добавляю этот ответ, чтобы помочь людям сделать это быстрее, чем я.

Мне пришлось добавить отдельный node в db, как упоминал Франк ван Пуффлен.

Импорт:

<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">

Затем разместите где-нибудь в своем приложении компонент <firebase-app>:

<firebase-app
  name="yourAppName"
  api-key= "{{yourApi}}"
  auth-domain= "{{yourAuthDomain}}"
  database-url= "{{yourDbUrl}}"
>
</firebase-app>

После этого вам нужно будет использовать <firebase-auth> и < firebase-document>:

Шаблон:

<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);
     );
    }
  }

И что это, вы можете взглянуть на этот отличный google codelab, который является хорошим введением в использование firebase с полимером.

Ответ 4

ПРИМЕЧАНИЕ. Этот метод работает только в том случае, если вы используете Firebase Admin SDK, и вам нужно иметь конечную точку на вашем сервере для управления пользовательскими токенами

Firebase Admin SDK имеет возможность создавать пользовательские токены с дополнительным объектом претензии, который может содержать произвольные данные. Это может быть полезно для хранения информации, связанной с пользователем, например, является ли пользователь премиум-пользователем или нет.

Дополнительные данные о претензиях доступны с помощью объекта auth.

Пример

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 также доступны в правилах безопасности Firebase.

для более подробной информации читайте Пользовательские токены Firebase

Ответ 5

Пользователь Firebase имеет фиксированный набор базовых свойств - уникальный идентификатор, основной адрес электронной почты, имя и URL-адрес фотографии, хранящиеся в пользовательской базе данных проекта, которые могут быть обновлены пользователем (iOS, Android, web). Вы не можете напрямую добавлять другие объекты к объекту Firebase User; вместо этого вы можете сохранить дополнительные свойства в своей базе данных Firebase Realtime.

Ответ 6

Вот быстрая версия. Ваша структура пользователя ( "таблица" ) похожа на

--users:
-------abc,[email protected],com:
---------------email:[email protected]
---------------name: userName
etc.

После передачи auth FIRAuth.auth()?.createUser вы можете установить пользователей в базе данных, как показано ниже:

        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)

Ответ 7

Обратите внимание, что метод изменен в версии 4.0. Поэтому для извлечения профиля пользователя вам необходимо использовать приведенный ниже код:

afAuth.authState.subscribe((user: firebase.User) => { 
  this.displayName = user.displayName;
  this.email = user.email;
  this.photoURL = user.photoURL;
});