博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Angular & Web] Retrieve user data from Session
阅读量:4561 次
发布时间:2019-06-08

本文共 2741 字,大约阅读时间需要 9 分钟。

Once user sign up, we store the user data inside cookie in the broswer and also keep a memory copy in the server. 

 

If next time, user refresh the page, we want to tell that the user is already authed.

 

Create a endpoint, to retrive the user data:

app.route('/api/user')  .get(getUser);

 

Router:

import {Request, Response} from 'express';import {sessionStore} from './session-store';export function getUser(req: Request, res: Response) {  // Get sessionid from cookies  const sessionId = req.cookies['SESSIONID'];  // get user according to the session id from the session storage  const user = sessionStore.findUserBySessionId(sessionId);  if (user) {    // if there is user, send successful response    res.status(200).json(user);  } else {    // if there is no user, send empty response    res.sendStatus(204);  }}

 

SessionStorage:

import {Session} from './session';import {User} from '../src/app/model/user';class SessionStore {  private sessions: {[key: string]: Session} = {};  createSession(sessionId: string, user: User) {    this.sessions[sessionId] = new Session(sessionId, user);  }  findUserBySessionId(sessionId: string): User | undefined {    const session = this.sessions[sessionId];    const isSessionValid = session && session.isValid();    return isSessionValid ? session.user : undefined;  }}// We want only global singletonexport const sessionStore = new SessionStore();

 

On the client, once page loaded, we try to get user data first.

import { Injectable } from '@angular/core';import {HttpClient} from '@angular/common/http';import {Observable} from 'rxjs/Observable';import {User} from '../model/user';import {BehaviorSubject} from 'rxjs/BehaviorSubject';import 'rxjs/add/operator/map';import 'rxjs/add/operator/shareReplay';import 'rxjs/add/operator/filter';import 'rxjs/add/operator/do';export const ANONYMOUS_USER: User = {  id: undefined,  email: ''};@Injectable()export class AuthService {  subject = new BehaviorSubject
(undefined); // filter out undefined user user$: Observable
= this.subject.asObservable().filter(user => !!user); isLoggedIn$: Observable
= this.user$.map(user => !!user.id); isLoggedOut$: Observable
= this.isLoggedIn$.map(isLoggedIn => !isLoggedIn); constructor(private http: HttpClient) { this.http.get
('/api/user') // when there is valid session id, emit the user$ .subscribe((user) => this.subject.next(user ? user : ANONYMOUS_USER)); } signUp(email: string, password: string) { return this.http.post
('/api/signup', { email, password }).shareReplay() .do((user) => this.subject.next(user)); }}

 

转载于:https://www.cnblogs.com/Answer1215/p/7475899.html

你可能感兴趣的文章
PHP基础系列(一) PHP字符串相关的函数分类整理
查看>>
stm32 外扩SRAM使用问题
查看>>
adb常用命令(golang版)及输入中文
查看>>
python虚拟机内存泄露?
查看>>
smarty半小时快速上手教程
查看>>
测试程序 ioctl , 不同版本下的ioctl存在区别
查看>>
脚本加密
查看>>
Spring Cloud 之 Eureka
查看>>
比特币、莱特币钱包下载和把数据迁移到C盘以外其他盘
查看>>
STL查找序列中处于某一大小范围内的元素个数
查看>>
C++ GUI Qt4学习笔记03
查看>>
Java基础回顾 —反射机制
查看>>
软件设计模式之适配器模式(JAVA)
查看>>
Javascript获取随机数
查看>>
<select>标签使用方法
查看>>
RabbitMQ入门
查看>>
博弈入门
查看>>
spark计算平均值
查看>>
Thread
查看>>
Chrome浏览器安装插件时一直停留在"正在检查"的可用解决方法
查看>>