Angularjs浏览器返回上一个网站

时间:2018-03-01 16:36:38

标签: javascript angularjs

我的Angularjs应用程序上的浏览器后退按钮存在问题。这是基本设置。我们在客户端计算机上执行令牌验证的多个页面(实际上是......)。以下是一个这样的状态的例子:

theApp.controller('someController',
  ['$scope', '$http', '$state', '$stateParams', '$log', 'authenticationFactory','myFactory',
    function ($scope, $http, $state, $stateParams, log, authenticationFactory, myFactory) {
      log.debug('someController');

      authenticationFactory.validateToken()
        .then(success => {
          return filesFactory.getFileContentDetails($stateParams.fileId);
        })
        .then(response => {
          $scope.stuff = response;
        })
        .catch(error => {
          $state.go('login', { error });
        })
        .finally(() => {
          spinnerFactory.hide('loading');
        });
      }]);

以下是已定义登录状态的片段:

$stateProvider
  .state('login', {
    url:         '/login',
    templateUrl: 'pages/login/login.html',
    controller:  'loginController',
    params:      {
      error: null
    }
  }).state('someresource', {
    url:         '/someresource/:fileId',
    templateUrl: 'pages/someresource/someresource.html',
    controller:  'someController'
  });

并且,以下是一些登录控制器:

theApp.controller('loginController',
  ['$scope', '$state', '$log', 'authenticationFactory', 'statusPopupFactory',
    function ($scope, $state, log, authenticationFactory, statusPopupFactory) {
      log.debug('loginController');
      if ($state.params.error) {
        log.error($state.params.error.data);
        statusPopupFactory.setStatus('danger', $state.params.error.data);
      } else if (localStorage.token) {
        authenticationFactory.validateToken()
          .then(user => {
            $state.go('home');
          })
          .catch(error => {
            log.error(`Token validation error: ${error.data}`);
          });
      }
    }]);

就这样,一切都表现得应该......可以登录,状态转换等。您可以直接点击URL,这会调出由someController控制的状态,而不是通过正常的应用程序菜单系统(即,我可以导航到由someController运行的https://theApp/someresource/1

当这样做,并且他们没有令牌(或者它已过期或其他任何原因......)时,他们会遇到状态登录。此时,如果他们回到浏览器,浏览器会尝试将它们重定向到它们来自的先前状态,而不是它们来自的网站。当它试图转到之前的状态时,它只是尝试重新验证令牌,失败,然后再将它们反弹回登录状态。所以这是一个循环循环。

问题是,此时从“登录”页面,他们实际上无法导航回以前的网站。感觉他们被“困在”网站中,除非您只是手动更改网址或关闭标签等,否则永远不会退出登录页面。

我该如何解决这个问题?

我最初的想法是,当登录状态加载时,我可以以某种方式查看所有浏览器历史记录,并删除应用程序的所有先前状态,但保留不是来自同一主机URL的任何状态。从登录方式来看,他们可以“浏览回来”就好了。然而,我已经筋疲力尽地试图解决这个问题......因此我就是这样。

0 个答案:

没有答案