API локального хранилища не работают в NativeScript WebView

Мое приложение — это веб-приложение, размещенное в {N} WebView. Имя пользователя и пароль хранятся в localStore. Когда я выхожу из приложения и снова захожу, у меня нет данных, и мне нужно вернуться к входу в систему.

Может ли кто-нибудь помочь мне? или объяснить, как отлаживать веб-представление в приложении. веб-страница разработана с помощью Angular 4, а приложение — с помощью NativeScript.

Зачем хранить пароли в localStorage?

Mickers 07.02.2019 16:42

чтобы иметь возможность использовать один и тот же метод входа в систему как в Интернете, так и на мобильных устройствах. Я использую его, чтобы пользователю не приходилось постоянно вводить пароль. Можете ли вы придумать способ сделать один и тот же вход для веб-сайта и приложения? Спасибо

Guillermo Calleja Herrero 07.02.2019 17:40

Вы должны сохранить sessionId или что-то еще, что вы используете, чтобы убедиться, что сеанс действителен. ЛЮБОЙ, кто поможет вам с этой проблемой, может легко взломать ваш сайт и украсть данные всех ваших пользователей. НЕ продолжайте использовать этот метод.

Mickers 08.02.2019 16:28
1
3
1 335
2

Ответы 2

С Android localStorage API не будут работать, пока вы не включите их. Вы можете включить его, обратившись к собственным настройкам WebView при загруженном событии.

export function onWebViewLoaded(args) {
    const webView = args.object;
    if (webView.android) {
        webView.android.getSettings().setDomStorageEnabled(true);
        webView.android.getSettings().setDatabaseEnabled(true);
    }
}

Образец детской площадки

Между тем, можете ли вы localStorage для сохранения конфиденциальной информации, такой как имя пользователя / пароль, здесь другой вопрос. Мой ответ будет нет, вы не можете использовать его, так как он легко / открыт для доступа. Как правило, вы должны войти в API с этими учетными данными, предоставленными пользователем, вам, вероятно, следует получить access token, который вы будете использовать для любого взаимодействия с сервером впоследствии. Вы можете сохранить этот токен на своем localStoage и очистить его при выходе из системы.

Пожалуйста, не помогайте этому разработчику создавать серьезную угрозу безопасности его сайта.

Mickers 08.02.2019 16:29

Можете ли вы объяснить немного об этом риске? Я обнаружил, что это решение работает для меня, но я не хочу иметь проблемы с безопасностью

CVO 26.02.2019 18:05

@Noark Я знаю, что опаздываю, но я полагаю, что Микерс говорит о небезопасности метода аутентификации OP (он говорит, что хранит пароли непосредственно в localStorage). Он не говорит о какой-либо неуверенности, присущей NativeScript или localStorage.

jknotek 21.07.2019 14:13

Идеально, спасибо!! пример работает хорошо.

.html

<Page (loaded) = "pageLoaded($event)">
        <GridLayout rows = "*" columns = "*">
           <WebView  #myWebView [src] = "webViewSrc" (loadStarted) = "onWebViewLoadStarted($event)"></WebView>
        </GridLayout>
</Page>

-component (файл ts)

import { Component, OnInit, AfterViewInit, ViewChild, ElementRef } from "@angular/core";

@Component({
    selector: "Home",
    moduleId: module.id,
    templateUrl: "./home.component.html",
    styleUrls:['./home.component.css']
})
export class HomeComponent  {
   public webViewSrc: string = URL;
    constructor(private routerExtensions: RouterExtensions) {
        // Use the component constructor to inject providers.
    }

    onWebViewLoaded(args){
        const webView = args.object;
        if (webView.android) {
            webView.android.getSettings().setDatabaseEnabled(true);
            webView.android.getSettings().setLoadWithOverviewMode(true);
        }
    }
    pageLoaded(args: EventData) {
        let page = <Page>args.object;
        page.bindingContext = new HomeViewModel();
    }
}

Пожалуйста, не помогайте этому разработчику создавать серьезную угрозу безопасности его сайта.

Mickers 08.02.2019 16:29

Другие вопросы по теме