登录后返回按钮 - 移动应用程序

时间:2017-05-22 17:05:47

标签: angularjs ionic-framework

我的移动应用程序存在一个小问题,我在AngularJS下开发。 经过身份验证后,我到达了我的申请的主页。我遇到的问题是手机上的“后退”按钮将我带回认证页面。

有没有办法不会发生这种情况?

我的登录代码:

var login = function($mail, $password) {
    var data = {
            mail: $mail,
            password: $password
        };
    return $http(
        {
            method  : 'POST',
            url     : url + '/login',
            headers : {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
            transformRequest: function(obj) {
                var str = [];
                for(var p in obj)
                str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                return str.join("&");
            },
            data    : data
        })
        .then(function(response) {
            var resp = response.data;
            var status = response.status;
            var token = response.data.token;
            if(status == 200) {
                $rootScope.isAuthenticated = true;
                $rootScope.token = token;
                storeUserCredentials($rootScope.token);
                $rootScope.errorMessage = null;
                $rootScope.$broadcast("authenticated", {token: token});
            } /*else {$rootScope.errorMessage = response.message;}*/
        }, function errorCallback(response) {
            console.log("ERROR");
    });
}

在我的logincontroller中:

controller('loginCtrl', function ($scope, $rootScope, $state, $ionicLoading, AppService) {
$scope.mail = '';
$scope.password = '';
ionic.Platform.ready(function () { });
$scope.login = function () {
  $ionicLoading.show();
  AppService.login($scope.mail, $scope.password)
    .then(function (resp) {
      $ionicLoading.hide();

      if ($scope.token) {
        afficherErreur = true;
        console.info('Successfully logged in...');
      }
    });
}
$scope.isValid = function () {
  var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  if ($scope.mail == undefined || $scope.password == undefined) return true;
  return !(regex.test($scope.mail) && $scope.password.length > 0);
}
$scope.FBLogin = function () {
  FB.login(function (response) {
    if (response.authResponse) {
      console.log('Welcome!  Fetching your information.... ');
      FB.api('/me', function (response) {
        console.log('Good to see you, ' + response.name + '.');
        console.log(response);
      });
    } else {
      console.log('User cancelled login or did not fully authorize.');
    }
  });
}

})

在我的appcontroller中:

$scope.$on("authenticated", function (e, data) {
  AppService.user().then(function (response) {
    if (response.nbconnexions == 1 || response.nbconnexions < 1) {
      $state.go('editProfil');
    } else {
      $state.go('menu.home', null, { reload: true });
    }
  });
});

提前感谢您的回答

1 个答案:

答案 0 :(得分:2)

为此,您可以使用$ionicHistory

$ionicHistory.nextViewOptions({
  disableBack: true
});

第二个选项是使用 removeBackView() - “完全从历史记录中删除以前的视图,包括缓存的元素和范围(如果存在)。 “

$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
    if(toState.name=="Login") ionicHistory.removeBackView();
  });

您还可以将家庭状态设置为导航堆栈的root

$ionicHistory.nextViewOptions({
    historyRoot: true
});
$state.go('app.home');