我正在寻找在NativeScript应用上设置Firebase身份验证,我很难搞清楚设置路由/组件的最佳做法。设置Firebase登录的NativeScript路由
我喜欢做的就是像任何典型的现代应用程序那样设置它,如果用户没有登录,那么他们被重定向到登录页面。如果已经登录,那么他们跳过登录页面并被重定向到他们的仪表板。
我有这样
import { Injectable } from '@angular/core';
import { RouterExtensions } from 'nativescript-angular/router';
import firebase = require("nativescript-plugin-firebase");
@Injectable()
export class UserService {
private uid;
private route;
constructor(router: RouterExtensions){
this.route = router;
}
public initFirebase(){ //This gets called from AppComponent Constructor
let that = this;
firebase.init({
onAuthStateChanged: function(data) {
if (data.loggedIn) {
that.route.navigate(["/dash"]);
} else {
console.log("NOT logged in.. redirecting to login");
that.route.navigate(["/login"]);
}
}
}).then(
(instance) => {
console.log("Firebase Initialized");
},
(error) => {
console.log("firebase.init error: " + error);
}
);
}
而在我目前已经设置了路由器user.service是
export const routes = [
{ path: "", component: LoginComponent },
{ path: "dash", component: DashComponent},
{ path: "login", component: LoginComponent}
];
但它重定向到破折号之前闪烁登录网页,其中是可怕的。
我也试着做..
export const routes = [
{ path: "", component: AppComponent },
{ path: "dash", component: DashComponent},
{ path: "login", component: LoginComponent},
];
但这种理性使火力地堡初始化两次。
所以最后我想这个..
export const routes = [
{ path: "", component: DashComponent},
{ path: "dash", component: DashComponent},
{ path: "login", component: LoginComponent},
];
但这运行DashComponent构造之前,我想它。 我想让user.service中的firebase init运行FIRST,然后在用户服务firebase init完成并重定向到破折号后运行DashComponent。
解决此问题的最佳做法是什么?