Использование Ax ios в приложении Nativescript для аутентификации пользователей - PullRequest
0 голосов
/ 20 февраля 2020

Я создаю приложение с использованием Nativescript- Vue, которое требует аутентификации пользователей для использования приложения. У меня есть RESTful бэкэнд, который функционирует надлежащим образом, как проверено с почтальоном

Токены JWT реализованы с постоянным сроком службы, но требуют обновления каждые 5 минут (функциональность refre sh - в вакууме - работает должным образом).

Использование Ax ios. js для веб-вызовов.

Я застрял на том, как реализовать basi c logi c для определения, вошел ли пользователь в систему. Все вызовы Ax ios возвращают 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 () - это асинхронная c функция, которая возвращает обещание, и, следовательно, я не могу получить возвращенное логическое значение. Я знаю, что это проблема, но я оставил это в коде, чтобы понять ожидаемый результат. Что я не понимаю, так это как переписать код так, чтобы спроектированный поток был осуществим с помощью Promises.

Core logi c разработан так:

  1. Проверьте состояние входа пользователя в систему через user.checkAuthStatus (). Эта подпрограмма проверяет действительный токен (действительное значение, которое существует и не имеет срока действия). Если срок его действия истек, токен обновляется с помощью вызова this.refre sh () из контроллера UserServices.

  2. Если значение «true» возвращается от пользователя. checkAuthStatus () приложение Vue должно загружать домашний компонент (он же пользователь вошел в систему), иначе пользователь должен будет войти в систему.

Я могу только представить, что это Простую ситуацию успешно преодолели тысячи людей, но мой мозг не работает через нее. Я понимаю, почему JS необходимо продолжать работать, чтобы не останавливать выполнение кода (и я думаю, в этом суть Promise), но иногда код просто должен остановиться и ждать, как кажется, как в сценарий аутентификации пользователя.

Любая помощь, детальная информация о том, как решить мою проблему? Пожалуйста и спасибо.

1 Ответ

0 голосов
/ 20 февраля 2020

Я бы сделал так:

Проверьте, существует ли локально сохраненный токен, действителен и не истек, если да go на домашнюю страницу, иначе перенаправьте на логин.

...