Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Parse JS SDK登录不使用AngularJs ui路由保留当前用户信息_Javascript_Angularjs_Parse Platform_Angular Ui Router_Oclazyload - Fatal编程技术网

Javascript Parse JS SDK登录不使用AngularJs ui路由保留当前用户信息

Javascript Parse JS SDK登录不使用AngularJs ui路由保留当前用户信息,javascript,angularjs,parse-platform,angular-ui-router,oclazyload,Javascript,Angularjs,Parse Platform,Angular Ui Router,Oclazyload,以下是我的模块配置和运行: angular.module('FXBApp', [ 'ui.bootstrap' ,'ui.router' ,'oc.lazyLoad' ,'parse-angular' ]). config(['$urlRouterProvider','$stateProvider', '$ocLazyLoadProvider', function($urlRouterProvider,$stateProvider,$ocLazyLoadProvider) { $ocLa

以下是我的模块配置和运行:

angular.module('FXBApp', [
'ui.bootstrap'
,'ui.router'
,'oc.lazyLoad'
,'parse-angular'
]).
config(['$urlRouterProvider','$stateProvider', '$ocLazyLoadProvider',
function($urlRouterProvider,$stateProvider,$ocLazyLoadProvider) {


  $ocLazyLoadProvider.config({
                                debug:false,
                                events:true
                              });


  $urlRouterProvider.otherwise('/login');

  $stateProvider
      .state('login', {
        url: "/login",
        templateUrl: "views/login/login.html",
        controller:'LoginCtrl',
        resolve:{
          loadMyFiles:function($ocLazyLoad){
            return $ocLazyLoad.load({
              name: 'FXBApp',
              files: ['scripts/controllers/login.js']
            })
          }
        }
      })
      .state('dashboard', {
          url: "/dashboard",
          templateUrl: "views/dashboard/main.html",
          controller:'DashboardMainCtrl',
          resolve:{
              loadMyFiles:function($ocLazyLoad){
                  return $ocLazyLoad.load({
                      name: 'FXBApp',
                      files: [
                                'views/dashboard/dashboard.main.js'
                                ,'views/dashboard/ribbon.js'
                                ,'scripts/directives/sidebar/sidebar.js'

                      ]
                  })
              }
          }
      })
      .state('dashboard.home', {
          url: "/dashboard/home",
          templateUrl: "views/dashboard/home.html",
          controller:'DashboardHomeCtrl',
          resolve:{
              loadMyFiles:function($ocLazyLoad){
                  return $ocLazyLoad.load({
                      name: 'FXBApp',
                      files: [
                                'scripts/controllers/dashboard.home.js'
                                ,'scripts/services/authentication.js'
                                ,'scripts/directives/stats/stats.js'
                                ,'scripts/services/dbstats.js'
                      ]
                  })
              }
          }
      })
run(['$rootScope','$state', function ($rootScope,$state) {
Parse.initialize("$$$$$$$", "######");
$rootScope.sessionUser ={};

$rootScope.isLoggedIn = function () {
    if (!Parse.User.current()) $state.go('login');
};

$rootScope.logOut = function () {
    Parse.User.logOut()
};
$rootScope.authUser = function (usr, pwd) {
    //TODO: assure user is active and e-mail is verified
    return Parse.User.logIn(usr,pwd).then(function (user) {
        var qr = new Parse.Query(Parse.Role);
        qr.equalTo('users', Parse.User.current().id);
        return qr.first().then(function (e) {
            try {
                if (e.getName() != 'admin' && e.getName() != 'team_leader') {
                    return {err: true, userId: user.id, msg: 'User does not have permission to access'}
                } else {
                    $rootScope.sessionUser = user;
                    return {err: false, userId: user.id}
                }
            } catch (e) {
                return {err: true, userId: user.id, msg: 'User not assigned to any role--'+e}
            }
        }, function (e){
            return {err: true, userId: user.id, msg:e.msg}

        });

    }, function (error) {
        return {err:true,msg:error.message}
    });
};

$rootScope.isLoggedIn()
}]);
正如你所见,我使用ui路由器和延迟加载来正确管理应用程序性能

使用
$rootScope.authUser($scope.usr,$scope.pwd)
从登录控制器启动登录序列后,如果我使用
那么()
关闭附加到此调用,我可以控制台
Parse.User.current()
,其中显示当前用户

登录后路由工作正常,棘手的部分是在成功登录后,我试图从parse.com类获取用户允许的数据;它总是给出403错误。调查原因时,我发现
Parse.User.current()
返回null,而
$rootScope.sessionUser
保留对登录用户的正确引用

我尝试使用“Parse.Session.getSessionToken”,错误是“没有当前用户”。我尝试使用
Parse.User.been($rootScope.sessionUsr.getSessionToken())
,但情况变得更糟,因为现在我遇到了无效的会话令牌错误,不得不转到chrome控制台从存储中删除Parse sdk对象


知道我做错了什么吗?

在我找到问题的根源之前,这是一段漫长的旅程。它与Parse SDK或angular无关。它与显示注销按钮的指令(问题帖子中未显示)相关。该指令调用
doLogOut
$scope函数,该函数反过来使用
Parse.User.logout()
触发注销序列

每次登录后加载此指令时,都会调用函数
doLogOut
,从而清除解析中的会话,并导致系统无法对数据库执行任何受限操作

触发
doLogout
而不是等待“ng click”事件的原因很简单,就是angular每次加载时都在计算$scope。这意味着它将在加载时计算“doLogOut”,而不是等待事件。将“doLogOut”更改为“doLogOut()”修复了该问题


最后,一个愚蠢的错误造成了许多复杂性。

在我找到问题的根源之前,这是一段漫长的旅程。它与Parse SDK或angular无关。它与显示注销按钮的指令(问题帖子中未显示)相关。该指令调用
doLogOut
$scope函数,该函数反过来使用
Parse.User.logout()
触发注销序列

每次登录后加载此指令时,都会调用函数
doLogOut
,从而清除解析中的会话,并导致系统无法对数据库执行任何受限操作

触发
doLogout
而不是等待“ng click”事件的原因很简单,就是angular每次加载时都在计算$scope。这意味着它将在加载时计算“doLogOut”,而不是等待事件。将“doLogOut”更改为“doLogOut()”修复了该问题

最后,一个愚蠢的错误造成了很大的复杂性