Firebase'i (telefon rehberi) kullanmak için resmi AngularJS belgelerini değiştirdim. AngularFireAuth nasıl düzgün uygulanır?
Bu
benim app yönlendiricidir:angular.module('phonecat', ['firebase']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {
templateUrl: 'partials/phone-list.html',
controller: PhoneListCtrl,
authRequired: false,
pathTo: '/phones'
}).
when('/phones/:age', {
templateUrl: 'partials/phone-detail.html',
controller: PhoneDetailCtrl,
authRequired: true,
pathTo: '/phones/:phoneId'
}).
when('/login', {
templateUrl: 'partials/login.html',
controller: LoginCtrl,
authRequired: false,
pathTo: '/login'
}).
otherwise({
redirectTo: '/phones'
}); }]);
denetleyici nasıl göründüğünü Bu - ama muhtemelen yanlış. Giriş işlevi çağrılır, ancak ne yapacağımı bilemiyorum. Kullanıcıyı giriş sayfasından telefon-detay.html sayfasına nasıl yönlendirmeliyim?
- Liste tüm telefonlar: Ne elde etmek istiyorum budur
<input type="text" name="username" ng-model="form.username"><br> <input type="text" name="password" ng-model="form.password"><br> <button name="login" id="login" ng-click="login()">login</button>
:
'use strict'; function PhoneListCtrl($scope, angularFire, angularFireAuth) { var url = 'https://<link>.firebaseio.com/'; var promise = angularFire(url, $scope, 'phones', []); angularFireAuth.initialize(url, {scope: $scope, name: "user"}); } function PhoneDetailCtrl($scope, $routeParams, angularFire, angularFireAuth) { var url = 'https://<link>.firebaseio.com/' + $routeParams.age; angularFireAuth.initialize(url, {scope: $scope, path: "/login"}); $scope.$on("angularFireAuth:login", function(evt, user) { var promise = angularFire(url, $scope, 'phone', {}); }); $scope.$on("angularFireAuth:logout", function(evt) { console.log("you are logged out."); }); $scope.$on("angularFireAuth:error", function(evt, err) { console.log(err); }); } function LoginCtrl($scope, angularFire, angularFireAuth) { var url = 'https://<link>.firebaseio.com'; $scope.form = {}; $scope.login = function() { console.log("called"); var username = $scope.form.username; var password = $scope.form.password; angularFireAuth.login('password', { email: username, password: password, rememberMe: false }); }; }
login.html şöyle bunlardan birinin ayrıntılarını al, doğrulanmış olup olmadıklarını kontrol et
- Evet ise, telefon bilgilerini göster - eğer değil, giriş sayfasına yönlendirin.
- Oturum açtıktan sonra bunları telefon ayrıntılarına yönlendirin.
Ben noktaları 3 ile mücadele ediyorum ve Anant yorumlarına sonra 4.
Güncelleme
- çok ilginç bir şey buldum. AngularFire.js'ye birkaç hata ayıklama msgs ekledim ve şu an denetleyicimde true değerinden yanlış olan authRequired değerini değiştirdim.
/Telefonlara gidersek - beklendiği gibi geri dönen listeden bir liste alırım. _loggedIn()
İçinde ben bir hata ayıklama ifadesi eklendi initialise içeride de bir kullanıcının nesne (döndürür console.log(user)
ekledi: https://github.com/firebase/angularFire/blob/master/angularFire.js#L437 - hem ben geçerli bir kullanıcı var olduğunu teyit henüz giriş
Sonra bir öğenin üzerine tıklarsanız, ben. beklediğim şeyi al - kullanıcı adı ve asıl sayfa yükler (aşağıdaki html'ye bakın). Sayfayı yenilediğimde (http: /// telefonlar/#/0) doğru sayfayı tekrar ve konsolda görüyorum, hala görüyorum
phone-list.html
<div class="container-fluid">
<div class="row-fluid">
<div class="span4">
<!--Body content-->
<ul class="phones">
<li ng-repeat="phone in phones">
<a href="#/phones/{{phone.age}}">{{phone.id}}</a>
<p>{{phone.snippet}}</p>
</li>
</ul>
</div>
</div>
</div>
phone-detail.html
<span ng-show="user">
{{user.email}} | <a ng-click="logout()">Logout</a>
you are look looking at {{ phone.name }}
</span>
<span ng-hide="user">
login pls!
</span>
: kullanıcı yine İşte kaydedilir belirten geçerli bir kullanıcı nesnesi, telefon-list.html ve telefon-details.html ikisi için HTML bulunuyorVe JSON'dan bir pasajı (artık Firebase parçasıdır):
[
{
"age": 0,
"id": "motorola-xoom-with-wi-fi",
"imageUrl": "img/phones/motorola-xoom-with-wi-fi.0.jpg",
"name": "Motorola XOOM\u2122 with Wi-Fi",
"snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)."
},
{
"age": 1,
"id": "motorola-xoom",
"imageUrl": "img/phones/motorola-xoom.0.jpg",
"name": "MOTOROLA XOOM\u2122",
"snippet": "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)."
}...etc
Sonra true geri authRequired değiştirirseniz - ve kullanıcı nesnesi varsa, o zaman sayfanın sonsuz bir döngüye almak yükler - önce bu/login sonra otomatik olarak yeniden yönlendirilir/telefon/0 ve hemen tekrar/tekrar giriş yapar ve bu tarayıcı çöker kadar olur.
LoginCtrl için başlangıç durumuna ekleyin:
var url = 'https://<link>.firebaseio.com/';
angularFireAuth.initialize(url, {scope: $scope});
Güncelleme 2
biraz daha hata ayıklama hatlar ekleyerek ve bu çözüm ile geldim kodu ile poking sonra
angularFire.js'de, 406 ve 407:
//this._redirectTo = null;
//this._authenticated = false;
satırlarını yorumladım. Kod 438 numaralı satırın sonuna eklenmiş, temel olarak this._authenticated = true
ve this._redirectTo = $route.current.pathTo
- yanı sıra this._authenticated = false
eklenmiştir.
var client = new FirebaseSimpleLogin(this._ref, function(err, user) {
self._cb(err, user);
if (err) {
$rootScope.$broadcast("angularFireAuth:error", err);
} else if (user) {
this._authenticated = true;
this._redirectTo = $route.current.pathTo;
self._loggedIn(user)
} else {
this._authenticated = false;
self._loggedOut();
}
});
this._authClient = client;
},
bu Bir kullanıcı giriş yaptığında ve ben http://<host>/#/login
gidin çalışmıyor sadece senaryo - $route.current.pathTo
/login
eşit olacaktır ve şu anda ben nasıl emin% 100 değilim Bunu aşmak. Bu Anant hakkında bir fikrin var mı?
Hmm,/phones /: yönlendirme beklenmedik şekilde gerçekleşmiyor mu? Bir pathTo ayarlarsanız, biz burada hatırlıyorum: https://github.com/firebase/angularFire/blob/master/angularFire.js#L361 ve giriş başarılı olduğunda, biz yönlendireceğiz: https://github.com/firebase /angularFire/blob/master/angularFire.js#L498 - Bu iki satırda bazı hata ayıklama ifadelerini yazmaya başladım. – Anant
Merhaba Anant - Cevabınız için teşekkürler. Bunu daha fazla hata ayıklamaya çalışacağım ve neyle karşılaştığımı anlatayım. En büyük sorunum, giriş yaptıktan sonra telefon detay sayfasını göstermek için uygulamayı "zorlayamam". Bir router.reload (/ phones /: age) çağırmalı mıyım? [Btw, sunumlarınızı gördüm - lütfen angularFire ile iyi çalışmaya devam edin, onu seviyorum.] – Tamas
Kullanıcı başarıyla oturum açtığında uygulamayı yeniden yüklemeye zorlamanız gerekmiyor, _loggedIn işlevi çağrılmalıdır. sonra uygulamayı yönlendirmek için $ location.path çağırır. Görünüşe göre bu bölüm çalışmıyor, lütfen bulgularınızla bir Github sorunu gönderin, böylece bunu takip edebiliriz! – Anant