【问题标题】:Using Axios in Nativescript App for User Authentication在 Nativescript App 中使用 Axios 进行用户认证
【发布时间】:2020-02-20 02:47:46
【问题描述】:

我正在使用 Nativescript-Vue 构建一个应用程序,该应用程序需要对用户进行身份验证才能使用该应用程序。我有一个 RESTful 后端,其功能与 Postman 的测试一致。

JWT 令牌具有永久生命,但需要每 5 分钟刷新一次(刷新功能 - 在真空中 - 正常工作)。

使用 Axios.js 进行网络调用。

我被困在如何实现确定用户是否登录的基本逻辑。所有 Axios 调用都返回一个 Promise。我已经阅读了很多扩展的“承诺”回复,但我并没有想到如何做我想做的事。简而言之,我需要暂停代码执行,直到 API 可以对用户进行身份验证,而这不是为我计算的。

代码如下:

app.js

// Import VUE library
import Vue from "nativescript-vue";

// This is my user handler
import {UserServices} from "./assets/js/UserServices.js"

// imported Components
import Login from "./components/Login";
import Home from "./components/Home.vue"

let user = new UserServices();
let loggedIn =  user.checkAuthStatus();

new Vue({
    render: h =>  h('Frame', [
        h(
            loggedIn ? Home : Login
        )
    ])
}).$start();

这不起作用,因为 user.checkAuthStatus() 是一个返回承诺的异步函数,因此我无法返回布尔值。我知道这是问题所在,但我将其留在了代码中,以便可以理解预期的结果。我不明白的是如何重写代码,以便使用 Promises 使设计的流程可行。

核心逻辑设计为:

  1. 通过 user.checkAuthStatus() 检查用户的登录状态。此例程检查有效令牌(有效意味着它存在且未过期)。如果已过期,则通过从 UserServices 控制器调用 this.refresh() 来刷新令牌。

  2. 如果从 user.checkAuthStatus() 返回值“true”,则 Vue 应用应加载 Home 组件(即用户已登录),否则应要求用户登录。

我只能想象这是成千上万人成功克服的简单情况,但我的大脑无法通过它。我明白为什么 JS 需要继续运行以免停止代码的进度(这就是 Promise 的重点,我认为?),但有时代码只需要停止并等待它,就像在用户身份验证中一样场景。

对如何解决我的挑战的具体细节有帮助吗?请,谢谢。

【问题讨论】:

  • 不幸的是,您不能等到 API 完成后再启动您的应用程序。如果存储了有效令牌,大多数应用程序会加载主页,加载主页后可能会异步验证令牌,如果发现令牌无效,用户将退出应用程序。或者,您可以使用加载屏幕启动应用程序,在验证登录后导航到相应页面。
  • @Manoj - 谢谢。我认为“加载”屏幕方法是有道理的,我没有想到。所以使用我的成功/失败回调在必要时重定向,知道等待页面将被显示,直到承诺解决。

标签: authentication promise axios nativescript


【解决方案1】:

我会这样做:

检查本地存储的令牌是否存在,有效且未过期,如果是则转到主页,否则重定向到登录。

【讨论】:

  • 谢谢。我正在这样做,除非添加了尝试刷新令牌(如果已过期)的步骤。等待这个令牌检查和刷新是我面临的挑战,也是 checkAuthStatus() 例程的关键异步组件。
  • 如果令牌存储在本地,则无需等待检查;仅当您需要从 API 检索某些内容时才应使用 async/await。因此,如果没有重定向到登录页面,则 id 令牌有效重定向到主页,然后当 async/await 获得结果时,根据该结果重定向用户。也就是说,如果我正确理解了您的问题。这是我在这种情况下的方法。
  • 谢谢。这就说得通了。尽管我仍在为从 mount() 进行编程导航而苦苦挣扎。
  • 好吧,我是 Vue 用户,所以我使用 github.com/nativescript-vue/nativescript-vue-navigator
猜你喜欢
  • 1970-01-01
  • 2018-12-10
  • 2022-06-14
  • 2012-03-26
  • 2011-04-19
  • 2022-12-01
  • 2021-09-01
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多