如何在NativeScript应用程序中恢复Express Session Authentication的会话ID?

时间:2018-06-09 17:14:28

标签: cookies nativescript

扣上,这个有点复杂。我知道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的会话?

1 个答案:

答案 0 :(得分:1)

基本答案是:你没有。

在移动开发方面,首选JWT,OAuth2或任何其他基于令牌的身份验证方法。您也可以对Web使用相同的身份验证方法。

使用the secure storage存储用户令牌,并发送令牌以及用户提出的任何请求。