2014-12-01 3 views
3

Чтобы создать нового пользователя в Angularfire 0.9, я могу использовать службу $ firebaseAuth и метод $ createUser.Firebase/Angularfire 0.9 - Создайте нового пользователя и профиль

Однако из того, что я могу сказать, этот метод не возвращает никаких учетных данных новых пользователей. Поэтому, если я хочу добавить к этому профилю профиль, лучший способ получить данные Auth Data, в частности, «uid», поэтому я могу сохранить данные профиля для моего нового пользователя. Ниже приведен пример того, что я пытаюсь сделать.

var FIREBASEURL = "https://<my-firebase>.firebaseio.com" 

var ref = new Firebase(FIREBASEURL); 
$rootScope.authObj = $firebaseAuth(ref); 

var newUser = { 
    email: "[email protected]", 
    password: "password", 
    displayName: "Display Name", 
    favFood: "Food" 
}; 

$rootScope.authObj.$createUser(newUser.email, newUser.password).then(function() { 

    console.log("User created successfully!"); 

    // Retrieve new Auth Data specifically uid  

    var newAuthData = ?????????? 

    // Remove password from object and create user profile 

    delete newUser.password; 
    newUser.timestamp = Firebase.ServerValue.TIMESTAMP; 

    var userRef = new Firebase(FIREBASEURL + '/users/'); 
    userRef.child(newAuthData.uid).set(newUser); 

}).catch(function(error) { 

    console.error("Error: ", error); 

}); 
+0

Чтобы частично ответить на мой собственный вопрос, в соответствии с Firebase Javascript API 2.0.5 changelog «Expose создал пользователя через второй аргумент в обратном вызове createUser().». Это дает вам новый «uid» Auth, который мне нужен. Я предполагаю, что библиотека Angularfire будет обновлена ​​соответствующим образом, и я обновлю этот вопрос, когда это произойдет. – pessato

ответ

7

В 0.9.1, uid будет возвращен с обещанием. Например:

var FIREBASEURL = "https://<my-firebase>.firebaseio.com" 

var ref = new Firebase(FIREBASEURL); 
$rootScope.authObj = $firebaseAuth(ref); 

var newUser = { 
    email: "[email protected]", 
    password: "password", 
    displayName: "Display Name", 
    favFood: "Food" 
}; 

$rootScope.authObj.$createUser(newUser.email, newUser.password).then(function(authData) { 
    console.log(authData.uid); //should log new uid. 
    return createProfile(newUser, authData); 
}); 


function createProfile(authData, user){   
    var profileRef = $firebase(ref.child('profile')); 
    return profileRef.$set(authData.uid, user); 
}; 

Это должно вас заставить. Ключ должен передать возвращенное обещание (authData в моем примере) к последующей функции.

В 0.9.0 необходимо вызвать метод аутентификации, чтобы получить пользовательский uid.

+3

Хотя это и отвечает на вопрос, как правило, это хорошая идея для аутентификации пользователя, прежде чем позволить им писать в свой профиль, поскольку это значительно упрощает правила безопасности и устраняет сложности анонимной записи в профили (которых много). – Kato

+0

Есть ли «красивое» решение о том, как создать, войти и добавить профиль для пользователя? И наоборот, удалите пользователя и профиль. Или всегда будут обещания и вложенные вызовы функций для этого? Думая о возможности успешного удаления пользователя, но не в профиле. Я предполагаю, что пакетное задание, которое выполняется каждый раз, может очистить материал, который терпит неудачу ... – KungWaz

+0

@Kato Что я делаю, просто попросите адрес электронной почты и пароль. После регистрации переадресовывайте логин. Затем пользователь подписывается, чтобы встретить другой дополнительный материал на странице профиля. В этот момент я знаю, что пользователь вошел в систему, поэтому сбережение довольно просто. – Rexford