【发布时间】:2015-05-29 10:05:15
【问题描述】:
我正在使用 AngularJs 和 Firebase,尝试让 Angularfire 用户身份验证正常工作。但是遇到了一些问题。
所以我在 nav 中有一个点击事件,它会弹出用户身份验证窗口。
index.html
<ul class="nav navbar-nav navbar-right">
<li><a href="#/">Home</a></li>
<li ng-hide="authData"><a href="" ng-click="auth.$authWithOAuthPopup('google')">Login</a></li>
<li ng-show="authData"><a href="" ng-click="auth.$unauth()">Logout</a></li>
</ul>
app.js
app.factory("Auth", ["$firebaseAuth", function($firebaseAuth){
return $firebaseAuth(ref);
}]);
app.controller("HomeCtrl", ["$scope", "Auth", "currentAuth", function($scope, Auth, currentAuth) {
$scope.auth = Auth;
$scope.auth.$onAuth(function(authData) {
$scope.authData = authData;
});
}]);
$stateProvider.state("home", {
controller: "HomeCtrl",
url: "/",
templateUrl: "partials/home.html",
resolve: {
"currentAuth": ["Auth", function(Auth) {
return Auth.$waitForAuth();
}]
}
})
当我点击导航中的Login 时,什么也没有发生,但如果我将代码作为部分文件并加载到ui-view,那么它就可以工作了。
我该如何解决它,以便每个页面的导航都可以正常工作。我有一个临时解决方案,即将正文中的所有内容作为部分加载。但这意味着我必须在每个部分上重复我的导航代码,我不想这样做。
是的...我在导航上尝试了ng-controller="HomeCtrl",没有必要这样做。 (见这里:https://stackoverflow.com/a/27975745/3927928)
编辑:Plunker 上的示例代码
【问题讨论】:
-
$waitForAuth() 只等待身份验证状态解决。它不会等到身份验证状态解析为有效登录(可能为空)。如果你想在路由中使用它,你应该在 $waitForAuth() 解析为 null 时重定向到“请验证”屏幕,然后在之后重定向回主页。
-
@Kato 我是 Angular 新手,我该怎么做?
-
查看the guide,它有一个关于路由的部分,以及angularFire-seed,它实现了这些策略。认真阅读这些文档,您最好在 Angular 教程中做同样的事情。
标签: javascript angularjs firebase angularfire