मैं अपने ऐप में कुछ पृष्ठों तक पहुंच को प्रतिबंधित करने के लिए Angular2 राउटर गार्ड का उपयोग करने की कोशिश कर रहा हूं। मैं फायरबेस प्रमाणीकरण का उपयोग कर रहा हूं। यह जांचने के लिए कि कोई उपयोगकर्ता फायरबेस के साथ लॉग इन है, मुझे कॉलबैक के साथ ऑब्जेक्ट .subscribe()
पर कॉल करना होगा FirebaseAuth
। यह गार्ड के लिए कोड है:
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFireAuth } from "angularfire2/angularfire2";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs/Rx";
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private auth: AngularFireAuth, private router: Router) {}
canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean>|boolean {
this.auth.subscribe((auth) => {
if (auth) {
console.log('authenticated');
return true;
}
console.log('not authenticated');
this.router.navigateByUrl('/login');
return false;
});
}
}
जब एक पृष्ठ इस पर गार्ड है, या तो करने के लिए एक नेविगेट authenticated
, या not authenticated
(firebase से प्रतिक्रिया के लिए कुछ देरी प्रतीक्षा के बाद) कंसोल के लिए मुद्रित है। हालाँकि, नेविगेशन कभी पूरा नहीं होता है। साथ ही, अगर मैं लॉग इन नहीं हूं तो मैं /login
रूट पर पुनर्निर्देशित हूं । इसलिए, मेरे पास जो समस्या return true
है वह उपयोगकर्ता के लिए अनुरोधित पृष्ठ प्रदर्शित नहीं करता है। मैं यह मान रहा हूं क्योंकि मैं एक कॉलबैक का उपयोग कर रहा हूं, लेकिन मैं यह पता लगाने में असमर्थ हूं कि यह कैसे करना है। कोई विचार?