Angular 4-登录成功时将数据存储在localStorage中

Angular 4-登录成功时将数据存储在localStorage中,angular,Angular,我有一个登录函数,我只想在登录有效时将数据存储在localstorage中,但在我的情况下,即使登录无效,它也会将数据存储在localstorage中 组件 onSubmit = function(formData) { this._membersService.login(formData); localStorage.setItem('loginSessId', formData.acct_username); } onSubmit = function(formData)

我有一个登录函数,我只想在登录有效时将数据存储在localstorage中,但在我的情况下,即使登录无效,它也会将数据存储在localstorage中

组件

 onSubmit = function(formData) {
   this._membersService.login(formData);
   localStorage.setItem('loginSessId', formData.acct_username);
 }
onSubmit = function(formData) {
  this._membersService.login(formData).subscribe((response) => {
    localStorage.setItem('loginSessId', formData.acct_username);
  },
    (err) => console.log(err)
  );
}
服务

login(data) {
  return this._http.post('http://localhost/membership/main/login', data)
  .subscribe(data => data);
}
login(data) {
  return this._http.post('http://localhost/membership/main/login', data);
}

您必须在组件中进行订阅,并且只有在这样成功的情况下才能进行订阅:

组件

 onSubmit = function(formData) {
   this._membersService.login(formData);
   localStorage.setItem('loginSessId', formData.acct_username);
 }
onSubmit = function(formData) {
  this._membersService.login(formData).subscribe((response) => {
    localStorage.setItem('loginSessId', formData.acct_username);
  },
    (err) => console.log(err)
  );
}
服务

login(data) {
  return this._http.post('http://localhost/membership/main/login', data)
  .subscribe(data => data);
}
login(data) {
  return this._http.post('http://localhost/membership/main/login', data);
}

那么,您在哪里处理登录失败?从这段代码中,即使登录失败,
localStorage.setItem()
似乎也会被执行;很好,这是可行的,我只是在response.text()成功时添加了一个条件,然后localstorage将执行Wesome,您可以使用httpClient而不是http来强制转换它,以便在订阅的响应中有一个json对象,或者,使用map操作符并将其作为json返回(如果您不想为httpClient更改服务)。请投票并接受结束这个问题。我仍然没有投票的特权。啊哈,我的代码是这样的如果(response.text()){//localStorage},什么是最好的abd最安全的方法?现在,我更新我的响应中的服务代码,向您展示如何使响应成为json(),您会遇到什么错误?如果将map()添加到服务中,则响应是json,.text()将不再工作。