AngularJS Firebase注销用户无法正常工作

尼桑·罗伊(Nishant Roy)

我的注销功能(链接到注销按钮)是:

$scope.logoutUser = function() {
  var ref = new Firebase("https://buzzmovieionic.firebaseio.com");
  ref.unauth();
  console.log(ref.getAuth);
  $state.transitionTo('login');
}

当我单击注销时,它将打印到控制台:

function (){x("Firebase.getAuth",0,0,arguments.length);return this.k.P.we()}

我正在使用以下命令在其他控制器中检查authData:

控制器:

.controller('SearchCtrl',
    function ($scope, $http, Movie, $state, UsersRef, AuthData, $timeout) {
      $scope.$on('$ionicView.enter', function () {
        if (!AuthData) {
          console.log("Auth data null!");
          swal("Unauthorized", "You are not logged in", "error");
          $state.transitionTo('login');
        } else {
          console.log("Auth data found: " + AuthData);
          //do stuff
        }
    });
})

工厂:

.factory("AuthData", [
    function () {
      var ref = new Firebase("https://buzzmovieionic.firebaseio.com");
      var data = null;
      ref.onAuth(function (authData) {
        if (authData) {
          data = authData;
        }
      });
      return data;
    }
  ])

如果我注销,然后通过更改URL返回到与SearchCtrl链接的页面,它仍然表示已找到authData。

但是,如果我第一次打开应用程序时尝试进入搜索页面,则在任何人登录之前,它会给我正确的错误消息并退出到登录页面。

如何确保用户注销后无法重新进入应用程序?

弗兰克·范普菲伦

欢迎使用异步编程101。

Firebase的onAuth方法侦听身份验证状态的更改。当身份验证状态更改时,将调用您提供的回调方法。但是,在等待身份验证状态更改时,您的其他代码将继续运行。

如果在代码中添加一些日志语句,最容易看到这一点:

.factory("AuthData", [
    function () {
      var ref = new Firebase("https://buzzmovieionic.firebaseio.com");
      var data = null;
      console.log('before onAuth');
      ref.onAuth(function (authData) {
        console.log('in callback');
        if (authData) {
          data = authData;
        }
      });
      console.log('after onAuth');
      return data;
    }
  ])

输出将是:

在onAuth之前

在onAuth之后

在回调中

编写此代码时,这可能不是您期望的。

解决此问题的最简单方法是使用同步 ref.getAuth()方法:

.factory("AuthData", [
    function () {
      var ref = new Firebase("https://buzzmovieionic.firebaseio.com");
      return ref.getAuth();
    }
  ])

但是,您经常会遇到这种异步性问题。我强烈建议您使用和研究AngularFire而不是重新发明轮子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

angularjs无法正常工作

来自分类Dev

Angularjs 无法正常工作

来自分类Dev

AngularJS服务无法正常工作

来自分类Dev

AngularJS指令无法正常工作

来自分类Dev

angularjs路由无法正常工作

来自分类Dev

AngularJS:ngChecked无法正常工作

来自分类Dev

AngularJS表无法正常工作

来自分类Dev

AngularJS Donut无法正常工作

来自分类Dev

AngularJS ngRoute无法正常工作

来自分类Dev

服务无法正常工作-AngularJS

来自分类Dev

AngularJS ngResource无法正常工作

来自分类Dev

AngularJS路由无法正常工作

来自分类Dev

AngularJS + RequireJS无法正常工作

来自分类Dev

AngularJS DataBinding无法正常工作

来自分类Dev

AngularJS服务无法正常工作

来自分类Dev

jsfiddle angularjs无法正常工作

来自分类Dev

单击angularjs无法正常工作

来自分类Dev

AngularJS 单击无法正常工作

来自分类Dev

AngularJS-ngShow无法正常工作

来自分类Dev

AngularJs ng-repeat无法正常工作

来自分类Dev

AngularJs中的Typeahead无法正常工作?

来自分类Dev

AngularJS:$ scope.emit无法正常工作

来自分类Dev

多选插件-AngularJs-无法正常工作

来自分类Dev

AngularJS 1.2-ngAnimate无法正常工作

来自分类Dev

AngularJS中的服务无法正常工作

来自分类Dev

AngularJs排序顺序无法正常工作

来自分类Dev

AngularJS密码确认noMatch无法正常工作?

来自分类Dev

无法获得Angularjs承诺能正常工作

来自分类Dev

AngularJS:ng-keypress无法正常工作