javascript - 使用存储的凭据自动登录 PhoneGap Onsen UI 应用程序

标签 javascript angularjs cordova phonegap-plugins onsen-ui

我有这个移动应用程序是用 PhoneGap、Onsen UI 和 AngularJS 制作的。

我有一个 index.html 文件,其中我有以下页面结构:

index.html
     - <ons-navigator var="myNavigator" page="login.html">

     - <ons-template id="login.html">
            - <ons-page ng-controller="LoginController" id="login">
     - <ons-template id="main.html">
            - <ons-page ng-controller="AppController" id="main">
                  - <ons-tabbar>
                     - <ons-tab active="true" page="upcoming.html">
                     - <ons-tab active="true" page="completed.html">
                     - <ons-tab active="true" page="settings.html">
     - <ons-template id="upcoming.html">
     - <ons-template id="completed.html">
     - <ons-template id="settings.html">

login.html 页面要求用户凭据,当用户单击“登录”时,这些凭据将存储在 window.localStorage 对象中。

下次我加载页面时,我希望应用程序不导航到 login.html 页面(不显示它),而是检查 localStorage 中的凭据,并使用 myNavigator推送到 main.html 页面,就像成功登录一样。

我有一个包含两个 Controller 的 main.js 文件,在 Controller 定义之外,我有一个 ons.ready 函数,它在加载 Onsen 框架时触发。

ons.ready(function() {
    var storage = window.localStorage;
    if(credentials_found_in_localStorage)
        myNavigator.pushPage('main.html');
    }
});

此功能正常工作,但在 pushPage 发生之前,login.html 页面会显示几秒钟(直到我返回是否登录成功)

如何使用存储的凭据并跳过 login.html 页面实现功能性自动登录?

处理此问题的最佳方法是什么? (也许是启动画面?)

最佳答案

您可以在没有指定页面的情况下启动您的导航器(删除 page="login.html" 属性),然后在 ons.ready() 上加载您想要的页面>:

ons.ready(function() {
  if(credentials_found_in_localStorage) {
    nav.resetToPage('main.html');
  } else {
    nav.resetToPage('login.html');
  }
});

在这里工作(更改 isLogged 的值):http://codepen.io/frankdiox/pen/eNmNoz

另一种可能的解决方案是删除您的 ons-navigator,因为我认为您只将它用于日志记录目的,并使用 ons-modal反而。为此,您必须使 ons-tabbar 成为主要元素(删除 ons-template id="main.html" 包装器)。在模式中,您可以包含实际的 login.html 页面,并且仅在用户未准备就绪时在 ons.ready 上执行 myModal.show()已登录。当他登录时,您只需执行 myModal.hide()。如果您不想在用户登录之前加载标签栏中的第一页,只需使用 myTabbar.loadPage(...)登录检查后。

希望对您有所帮助!

关于javascript - 使用存储的凭据自动登录 PhoneGap Onsen UI 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32252875/

相关文章:

javascript - 我什么时候可以同步使用 Meteor.call?

javascript - Internet Explorer 8 中的 Angular-UI-Router 嵌套 View

javascript - 带有PNG文件的AngularJS素材图标

javascript - PhoneGap 通知

javascript - Cordova InAppBrowser executeScript回调

javascript - 需要更深入地了解 json,但在 ajax 服务器响应时我无法做到这一点

javascript - 如何显示所有 localStorage 保存的变量?

javascript - AngularJS - ngRoute - View 加载完成后的回调

sql - firebase:在 firebase 中实现模式搜索

javascript - 在 Android 7 上使用 cordova-plugin-file 不起作用