Podążam za tutorialem Thinkster Ang-News z najnowszą wersją Enginefire (0.8.0) zainstalowaną. Udało mi się dostać się do Część 7 samouczka pomyślnie, ale utknąłem na części, w której muszę wstawić obiekt użytkownika do FireBase Forge. Kod działa w następujący sposób:
Gdy nowy użytkownik rejestruje za pośrednictwem mojego formularza HTML, nazywany jest funkcja "Zarejestruj" i "User.Create (Authuser, $ scope.user.username);" jest wykonywany w funkcji "Zarejestruj".
// login and registration page
app.controller('AuthCtrl',
function ($scope, $location, Auth, User) {
if (Auth.signedIn()) {
$location.path('/');
}
$scope.$on('firebaseSimpleLogin:login', function(){
$location.path('/');
});
$scope.login = function(){
Auth.login($scope.user).then(function(){
$location.path('/');
}, function (error){
$scope.error = error.toString();
});
};
$scope.register = function () {
Auth.register($scope.user).then(function (authUser) {
Auth.login($scope.user);//cause creating user auto login
User.create(authUser, $scope.user.username);
console.log(authUser);
$location.path('/');
}, function (error){
$scope.error = error.toString();
});
};
});
Usługa "Użytkownik" ma funkcję "Utwórz", która tworzy obiekt użytkownika i powinien przechowywać informacje o obiekcie w FireBase Forge. Jak widać poniżej, "Użytkownicy Jednak nic nie dzieje się w moim FireBase Forge, gdy wywoływana jest metoda $ Save. Sprawdziłem najnowsze specyfikacje Angularfire i jak widać w moim kodzie komentarze (//), próbowałem połączyć $ asarray (), $ asobject () z zmienną "Użytkownicy", ale to nie działało. Kiedy używałem "Użytkownicy. $ Dodaj (nazwa użytkownika);" Zamiast dzwonić metodę $ Save, moja FireBase Forge właśnie dodała nazwę użytkownika bez właściwości obiektu.
app.factory('User', function ($firebase, FIREBASE_URL, Auth, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);
//var users = $firebase(ref).$asObject();
//var users = $firebase(ref).$asArray();
var User = {
create: function (authUser, username) {
users[username] = {
md5_hash: authUser.md5_hash,
username: username,
$priority: authUser.uid
};
//users.$add(username);
users.$save(username).then(function () {
setCurrentUser(username);
});
}, // end of create fxn
Ponownie, nie mogę wstawić obiektu "Użytkownicy [Nazwa użytkownika]" do mojego FireBase Forge z metodami $ Save lub $ Add Add Sacularfire. Znacznie doceniłbym jakąkolwiek pomoc.
Jon.
3 odpowiedzi
W tej chwili modyfikujesz wiązanie, a następnie wywołujesz $save
. Musisz użyć $asObject
lub $asArray
, aby dostać się do metody $save
.
W twoim przypadku nie musisz synchronizować żadnych obiektów - wystarczy zaoszczędź. Możesz utworzyć nowy obiekt dla użytkownika i użyć $update
na wiązaniu.
app.factory('User', function ($firebase, FIREBASE_URL, Auth, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);
var User = {
create: function (authUser, username) {
users.$update(username, {
md5_hash: authUser.md5_hash,
username: username,
priority: authUser.uid
});
}, // end of create fxn
Po poprzedniej odpowiedzi użyłem tej składni aktualizacji $, aby ustawić priorytet, który wydaje się pracować:
users.$update(username, {
md5_hash : authUser.md5_hash,
username : username
}).then(function(ref) {
ref.setPriority(authUser.uid);
});
David odpowiedział już jak szef, ale dla jasności tutaj jest fragment 100% pracy , aby zastąpić /services/user.js .
'use strict';
app.factory('User', function ($firebase, FIREBASE_URL, Auth, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);
var User = {
create: function (authUser, username) {
users.$update(username, {
md5_hash: authUser.md5_hash,
username: username,
setPriority: authUser.uid
});
}
};
return User;
});
Głosuj do Davida, nie ja :).