Как восстановить идентификатор сеанса для экспресс-аутентификации сеанса в приложении NativeScript? - PullRequest
0 голосов
/ 09 июня 2018

Пристегнись, это немного сложно.Я знаю, что Express отправляет браузеру файл cookie connect.sid ... и Passport использует его для десериализации пользователя по веб-запросам.Не только это, но и когда я вхожу в свое приложение из моего приложения NativeScript (я работаю на эмуляторе Pixel 2 на ПК с Windows, но я знаю, что оно работает и на iOS), кажется, что файл cookie правильно установлен и отправленнаряду с будущими веб-запросами.Я также понимаю, как работает API application-settings, и что вы можете использовать его для хранения идентифицирующего пользователя токена для будущих загрузок приложения (чтобы мне не приходилось каждый раз входить в систему).

Так вот, где происходит отключение.Возможно, я могу переопределить cookie в заголовке запроса, если он у меня сохранен, но нигде не могу найти документацию о том, как извлечь cookie из успешного запроса входа в систему в nativescript.

Вот код:

TokenSvc

import { Injectable }     from "@angular/core";
import { getString, setString } from "application-settings";

export class TokenSvc {
   static isLoggedIn(): boolean {
      return !!getString("token");
   }

   static get token(): string {
      return getString("token");
   }

   static set token(token: string) {
      setString("token", token);
   }
}

Компонент входа в систему

(Обратите внимание, что я делаю неловкую попытку получить файлы cookie из нового экземпляра HttpHeaders.... не знаю, почему я подумал, что это сработает.)

@Component({
    selector: "app-login",
    moduleId: module.id,
    templateUrl: "./login.component.html",
    styleUrls: ["./login.component.scss"]
})
export class LoginComponent {
    credentials: ILoginCredentials;
    @ViewChild("password") password: ElementRef;
    @ViewChild("handle") handle: ElementRef;
    @ViewChild("confirmPassword") confirmPassword: ElementRef;

    constructor(private page: Page, private router: Router, private AuthSvc: AuthSvc, private _store: Store<AppStore>) {
        this.page.actionBarHidden = true;
        this.credentials = {
           email: "",
           password: "",
           cPassword: "",
           handle: "",
           publicName: ""
        };
    }


    login() {
        const loginCredentials: ICredentials = {
            username: this.credentials.email,
            password: this.credentials.password,
            rememberMe: false
        };
        this.AuthSvc.login(loginCredentials).subscribe(
            (payload) => {
                console.log(payload);
                if (payload.failure) {
                    alert(payload.failure);
                } else {
                    // user!
                    let cookies = new HttpHeaders().get("Cookie");
                    console.log(cookies);
                    TokenSvc.token = cookies;
                    this._store.dispatch({ type: "SET_USER", payload: payload });
                    this.router.navigate(["/tabs"]);
                }
            }, () => alert("Unfortunately we were unable to create your account.")
      );
   }

}

Основной вопрос здесь ... как мне сохранить сеанс на основе файлов cookie в настройках приложения NativeScript с обратным Node / Expressконец

1 Ответ

0 голосов
/ 11 июня 2018

Основной ответ таков: вы этого не делаете.

Предпочитаете JWT, OAuth2 или любой другой метод аутентификации на основе токенов, когда речь идет о разработке для мобильных устройств.Вы можете использовать тот же метод аутентификации для веб-сайтов.

Сохраните токен пользователя, используя безопасное хранилище , и отправьте токен вместе с любым запросом, сделанным пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...