javascript - 如何在 Angular(客户端)和 Loopback(服务器)应用程序中刷新页面时防止用户注销?

标签 javascript angularjs loopbackjs

我有一个带有 Angular 客户端的 Loopback.io SPA。我遵循了官方的 Loopback 文档 https://loopback.io/doc/en/lb2/Create-AngularJS-client.html 问题是,当我在浏览器中刷新页面时,客户端正在注销。看来刷新后currentUser变量并没有恢复。我该如何解决这个问题?

以下是 auth.js 和 app.js 文件:

js/services/auth.js

angular
  .module('app')
  .factory('AuthService', ['Reviewer', '$q', '$rootScope', function(User, $q,
    $rootScope) {
    function login(email, password) {
      return User
        .login({
          email: email,
          password: password
        })
        .$promise
        .then(function(response) {
          $rootScope.currentUser = {
            id: response.user.id,
            tokenId: response.id,
            email: email
          };
        });
    }

    function logout() {
      return User
        .logout()
        .$promise
        .then(function() {
          $rootScope.currentUser = null;
        });
    }

    function register(email, password) {
      return User
        .create({
          email: email,
          password: password
        })
        .$promise;
    }
    return {
      login: login,
      logout: logout,
      register: register
    };
  }]);

client/js/app.js

angular
  .module('app', [
    'ui.router',
    'lbServices'
  ])
  .config(['$stateProvider', '$urlRouterProvider', function($stateProvider,
    $urlRouterProvider) {
    $stateProvider
      .state('add-review', {
        url: '/add-review',
        templateUrl: 'views/review-form.html',
        controller: 'AddReviewController',
        authenticate: true
      })
      .state('all-reviews', {
        url: '/all-reviews',
        templateUrl: 'views/all-reviews.html',
        controller: 'AllReviewsController'
      })
      .state('edit-review', {
        url: '/edit-review/:id',
        templateUrl: 'views/review-form.html',
        controller: 'EditReviewController',
        authenticate: true
      })
      .state('delete-review', {
        url: '/delete-review/:id',
        controller: 'DeleteReviewController',
        authenticate: true
      })
      .state('forbidden', {
        url: '/forbidden',
        templateUrl: 'views/forbidden.html',
      })
      .state('login', {
        url: '/login',
        templateUrl: 'views/login.html',
        controller: 'AuthLoginController'
      })
      .state('logout', {
        url: '/logout',
        controller: 'AuthLogoutController'
      })
      .state('my-reviews', {
        url: '/my-reviews',
        templateUrl: 'views/my-reviews.html',
        controller: 'MyReviewsController',
        authenticate: true
      })
      .state('sign-up', {
        url: '/sign-up',
        templateUrl: 'views/sign-up-form.html',
        controller: 'SignUpController',
      })
      .state('sign-up-success', {
        url: '/sign-up/success',
        templateUrl: 'views/sign-up-success.html'
      });
    $urlRouterProvider.otherwise('all-reviews');
  }])
  .run(['$rootScope', '$state', function($rootScope, $state) {
    $rootScope.$on('$stateChangeStart', function(event, next) {
      // redirect to login page if not logged in
      if (next.authenticate && !$rootScope.currentUser) {
        event.preventDefault(); //prevent current page from loading
        $state.go('forbidden');
      }
    });
  }]);

最佳答案

刷新页面初始后在 angularjs 中的作用域,并且在刷新前不保存旧值 您可以将 token 保存在本地存储浏览器(或cookie)和加载页面设置范围中

关于javascript - 如何在 Angular(客户端)和 Loopback(服务器)应用程序中刷新页面时防止用户注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59147439/

相关文章:

javascript - 自定义 CSS/HTML 圆形菜单

javascript - 使用 Gulp 时 AngularJS 组件配置错误

node.js - Count 方法在环回中与 where 子句一起使用时会引发语法错误

javascript - angularjs ng-grid row 模板与启用单元格编辑冲突?

loopbackjs - 这是什么意思? 500 错误 : schema is invalid: data. $ref 应匹配格式 "uri-reference"

mysql - StrongLoop中的过滤条件用[and]和[or]条件一起编写

javascript - 表单提交 404 未找到错误

javascript - 用户名和密码的Javascript登录页面数组不起作用

javascript - EmberJS 控制台错误-加载路由 : undefined 时出错

javascript - 如何搜索 JSON 对象来查找特定的参数值?