扣上,这个有点复杂。我知道Express向浏览器发送application-settings
cookie ...并且Passport使用它来对Web请求上的用户进行反序列化。不仅如此,当我从NativeScript应用程序登录我的应用程序时(我在Windows PC上的Pixel 2模拟器上运行,但我知道它也适用于iOS),cookie似乎正确设置并发送未来的网络请求。我也了解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);
}
}
API的工作原理,并且您可以使用它来存储用户识别令牌,以便将来启动应用程序(这样我就不必每次都登录)。< / p>
所以这里发生断开连接。可以想象,如果存储了cookie,我可以覆盖请求标头中的cookie,但是我无法找到有关如何从nativescript中的成功登录请求中检索cookie的文档。
以下是代码:
TokenSvc
@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.")
);
}
}
登录组件
(注意我正在尝试从新的HttpHeaders实例获取cookie ...我不确定为什么我认为这样可行。)
{{1}}
这里的基本问题是......如何使用Node / Express后端在NativeScript应用程序设置中保持基于cookie的会话?
答案 0 :(得分:1)
基本答案是:你没有。
在移动开发方面,首选JWT,OAuth2或任何其他基于令牌的身份验证方法。您也可以对Web使用相同的身份验证方法。
使用the secure storage存储用户令牌,并发送令牌以及用户提出的任何请求。