在我的angular2应用程序中,我确实有authentication.service.ts
和login.component.ts
authentication.service.ts
login(username: string, password: string) {
return this.http.post('/auth/loginapp', JSON.stringify({ username: username, password: password }))
.map((response: Response) => {
// login successful if there's a jwt token in the response
let user = response.json();
//Printt the backend response to the console
this.logger.debug('User '+ JSON.stringify(user));
if (user && user.token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
}
});
}
authentication.service.ts调用后端身份验证服务并根据用户输入获取响应并保存到localStorage。
login.component.ts
this.authenticationService.login(this.model.username, this.model.password)
.subscribe(
data => {
this.logger.debug("Login User"+ JSON.stringify(data))
this.router.navigate(['register']);
},
error => {
this.logger.error(error);
this.alertService.error(error);
this.loading = false;
});
我始终在data
中undefined
获得login.component.ts
。 authentication.service.ts正确获取响应。我需要将响应数据提供给login.component.ts。谁能告诉我代码的问题?
答案 0 :(得分:2)
Observable map operator
期待你回归一些东西,我相信你不会在那里归还任何东西。通常,您希望修改map operator
中的数据。但在你的情况下,你不是。由于您在'流之外执行操作一种选择是使用.do operator
。
您可以使用do来代替......
.do((response: Response) => {
let user = response.json();
if (user && user.token) {
localStorage.setItem('currentUser', JSON.stringify(user));
}
});
如果您坚持使用地图,请确保它返回一些内容......
.map((response: Response) => {
let user = response.json();
if (user && user.token) {
localStorage.setItem('currentUser', JSON.stringify(user));
}
return response;
});