来自后端的角度处理“ x-auth”令牌

时间:2018-08-24 06:47:42

标签: node.js angular typescript web-services http

我已经用NodeJs创建了一个后端,用户每次登录时他都可以注册/登录,他从响应头中获得一个新创建的“ x-auth”令牌。 用户也可以在登录时创建Todo,该Todo与通过“ x-auth”令牌创建Todo的用户的ObjectID链接。 我的问题是-> User1创建待办事项,但是User2看到Todo的User1已创建。 如果我对Postman进行相同的操作,它的确会像魅力一样发挥作用。 在我的Angular前端中,它的工作方式不同于Postman。 也许我确实存储了x-auth令牌错误?还是应该以哪种方式存储令牌?

不要误会我可以将自定义标头存储在sessionStorage中,但是我不知道这是否是存储如此重要值的最佳方法。是否可以将其存储在Angular中?

发生登录和登录的服务:

@Injectable({
  providedIn: 'root'
 })
 export class UserLoginService {

 constructor(private $http: HttpClient) { }

 createUser( user: User )  {
     return this.$http.post<User>( environment.endpoint + "users", user , {observe: 'response'})
      .pipe(
          map( ( response: Response ) => sessionStorage.setItem('x-auth', response.headers.get('x-auth'))
      )).toPromise();
}

loginUser( user: User ) {
  return this.$http.post<User>( environment.endpoint + "users/login", user , {observe: 'response'})
      .pipe(
          map( ( response: Response ) => sessionStorage.setItem('x-auth', response.headers.get('x-auth'))
      )).toPromise();
}

}

使用身份验证令牌创建Todo的服务

@Injectable()
export class TodoService {

   headers = {
      'x-auth': sessionStorage.getItem('x-auth')
    };

   requestOptions = {
      headers: new HttpHeaders(this.headers)
    };

  todos$: BehaviorSubject<Todo[]> = new BehaviorSubject<Todo[]>( [] ) ;

  readonly todoEndPoint = environment.endpoint + "todos"

  constructor( private $http: HttpClient) {}

  // Get´s all Todos
  getAllTodos(): Observable<Todo[]>{
      return this.$http.get<Todo[]>( this.todoEndPoint, this.requestOptions )
      .pipe(
        tap( val => this.todos$.next( val ))
      )
  }

0 个答案:

没有答案