Пристегнись, это немного сложно.Я знаю, что 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конец