您好我从Cordova和AngularJS开发了一种离子应用。我在这里遇到的问题是当用户打开应用程序并执行登录时,用户导航到仪表板。这里一旦用户导航,直到用户点击Logout选项或清除缓存,他/她就不应该返回登录页面。
但在我的情况下,当用户登录并点击设备的后退按钮时,它将再次返回登录页面,用户必须再次登录。如何避免呢?
即使应用程序进入后台,我仍希望维护用户登录状态。
如何实现这一目标?
更新
我尝试过这段代码:
controller('Dashboard', function ($scope, $http, $ionicPopup, $timeout, $state, $rootScope, $interval, $sce, $ionicPlatform) {
$ionicPlatform.onHardwareBackButton(function () {
if (true) { // your check here
$ionicPopup.confirm({
title: 'Exit from App!',
template: 'are you sure you want to exit?'
}).then(function (res) {
if (res) {
navigator.app.exitApp();
}
})
}
});
它执行得很好,但问题是它按下每个后退按钮执行。因此,如果用户在仪表板内导航到菜单,并且单击后退按钮(按自然界面)以co回到不是仪表板页面的上一页,那么即使它被调用。这对于用户体验而言是如此令人尴尬。我已将这段代码添加到仪表板控制器中,而不是其他地方?我只能在dashboard
控制器中调用此事件或者是否可以这样做。
答案 0 :(得分:0)
但在我的情况下,当用户登录并点击设备的后退按钮时,它将再次返回登录页面,用户必须再次登录。如何避免呢?
我认为你应该听听Cordova docs中描述的backbutton
事件。在此监听器中添加一些代码以避免返回登录页面。
即使应用程序进入后台,我仍希望维护用户登录状态。
如何实现这一目标?
你应该为你的应用程序添加某种缓存,添加$ionicHistory
保存到它并在应用程序加载时首先检索/重置它,就像配置时间一样。
答案 1 :(得分:0)
在您的登录状态定义中添加resolve
属性,只有在用户未登录时才应解析。如果用户已登录,则拒绝承诺。如果承诺被拒绝,那么单击后退按钮将不起任何作用,因为重定向不会发生:
.state('login', {
url: '/login',
templateUrl: 'login.html',
controller: 'login.controller as login',
resolve: {
path: function($q) {
if (isUserLoggedIn) {
$q.reject();
} else {
$q.resolve();
}
}
}
})
即使应用程序进入后台,我仍希望维护用户登录状态。
如何实现这一目标?
为了保持登录状态,请使用持久机制。最简单的方法是使用angular-local-storage
模块,该模块使用本地存储