我已经用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 ))
)
}