我在使用http请求获取用户信息到我的其他api服务器时遇到问题,我不知道出了什么问题....
当用户点击登录按钮时,Angular使用用户名和密码向服务器发送请求,如果正确则返回用户信息,否则返回null。问题是用户服务中的变量用户仍然为null,尽管用户名和密码是正确的。
我不知道如何解决这个问题,所以如果你帮助我,我会很开心!感谢您的帮助。
REST API:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { User } from '../entities/User';
@Injectable()
export class UserService {
private usersUrl: 'http://localhost:8080/api/users';
user: User;
verifyUrl: string;
constructor(private http: HttpClient) {}
isLoggedIn() {
return this.user != null;
}
isAdmin() {
return this.user.isAdmin;
}
unLoggin() {
this.user = null;
}
login(username: string, password: string) {
this.verifyUrl = 'http://localhost:8080/api/users/verify?username=' + username + '&password=' + password;
this.http.get<User>(this.verifyUrl).subscribe(data => this.user = data);
if (this.user != null) {
return true;
} else {
return false;
}
}
}
用户服务
{{1}}
答案 0 :(得分:0)
你过早地打电话给if (this.user !== null)
。在请求消失之前,将会调用该评估。试试这个:
login(username: string, password: string) {
this.verifyUrl = `http://localhost:8080/api/users/verify?username=${username}&password=${password}`;
return this.http.get<User>(this.verifyUrl)
.map(data => {
this.user = data
if (this.user != null) {
return true;
} else {
return false;
}
});
}
但事情是,无论你在哪里调用这个login
方法,它现在都是你必须订阅的可观察对象,而不是同步方法。