gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:31:20 24 4
gpt4 key购买 nike

这是我的模块配置和运行:

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) 从登录 Controller 启动登录序列,如果我使用 then()密切关注此电话我可以安慰Parse.User.current()显示当前用户。

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

我尝试使用“Parse.Session.getSessionToken”,错误是“没有当前用户”。我尝试使用 Parse.User.become($rootScope.sessionUsr.getSessionToken())但事情变得更糟,因为现在我收到无效 session token 错误,并且必须转到 chrome 控制台从存储中删除解析 sdk 对象。

知道我做错了什么吗?

最佳答案

在我发现问题的根本原因之前,这是一段漫长的旅程。它与 Parse SDK 或 Angular 无关。它与显示注销按钮的指令相关(问题帖子中未显示),该指令调用 doLogOut $scope 函数,该函数又使用 Parse 触发注销序列。 User.logOut()。

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

触发 doLogout 而不是等待“ng-click”事件的原因很简单,Angular 在每次加载时都会评估 $scope。这意味着它将在加载时评估“doLogOut”,而不是等待事件。将 'doLogOut' 更改为 'doLogOut()` 解决了问题。

一个愚蠢的错误最终导致了很多复杂性。

关于javascript - Parse JS SDK 登录不使用 AngularJs ui 路由保留当前用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com