javascript - 类型 'csrf_token' 上不存在属性 'Object'

标签 javascript angular typescript local-storage

这是一个简单的问题。

我正在尝试使用 Angular 5 和 Drupal 8 作为后端进行登录。连接工作正常,我可以将 JSON 发送到 Drupal 站点,它会返回一个 CSRF token 。

现在我想将它添加到我的本地存储中。

这是我的login.service.ts中的登录功能

login (user: User): Observable<User> {
      const url = `${this.mainUrl}user/login?_format=json`;  
    const loginReturn = this.http.post(url, user, httpHaljson);   
    console.log (loginReturn);    

    return loginReturn 
    .map(user => 
      {
     // store user details and jwt token in local storage to keep user logged in between page refreshes
      localStorage.setItem('currentUser', JSON.stringify(user));
      return user;           
     })   
    .pipe( 
        tap((user: User) => this.log(`Token `+  JSON.stringify(user.csrf_token))),
        catchError(this.handleError<User>('login'))
      );
}

如果我尝试做这样的事情:

.map(user => 
              {
             // store user details and jwt token in local storage to keep user logged in between page refreshes
              localStorage.setItem('currentUser', JSON.stringify(user));
              console.log ('object' + JSON.stringify(user));
              console.log ('CSRF TOKEN' + JSON.stringify(user.csrf_token));
              return user;           
             }) 

它向我显示了我的 csrf token 的控制台日志,非常好,但我在控制台上收到此错误:

控制台:

object{"current_user":{"uid":"4","name":"cravushedal"},"csrf_token":"lY4vX3Ns_PrBkpPqoit4PEuEhXlimhKJ-xBt6ouUMXc","logout_token":"KOvJljv47rO3tRV3OG37ZKH57VWAG2gGxPe8nwCmN7A"}

login.service.ts:39 CSRF TOKEN"lY4vX3Ns_PrBkpPqoit4PEuEhXlimhKJ-xBt6ouUMXc"

It says: ERROR in src/app/login.service.ts(37,65): error TS2339: Property 'csrf_token' does not exist on type 'Object'. enter image description here

最佳答案

正如评论中提到的,这是由于 Typescript 无法计算 user 的类型属性。

当您调用 HttpClient#post without a type argument时,它返回 Observable<Object>实例,和Object没有任何属性(并且与 any 不同,它不“灵活”)。

您需要调用 HttpClient#post这样,返回值就变成Observable<User> :

this.http.post<User>(url, user, httpHaljson); 

您还可以在使用 map 时指定其实际类型:

.map((user: User) => ...

关于javascript - 类型 'csrf_token' 上不存在属性 'Object',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578995/

相关文章:

javascript - 如何使用 jquery 禁用日历

javascript - 加载时淡入图像

javascript - TypeScript:连接具有不同元素类型的数组

angular - ngx-cookieconsent : Cannot find name 'NgcInitializeEvent' and 'NgcStatusChangeEvent'

javascript - Ionic 3 - 应用程序在使用 --prod 构建后显示空白屏幕

javascript - 仅使用环境定义导入 TypeScript 模块以在 amd 中使用

javascript - AngularJS 单选过滤不适用于名称、描述和 Field4 复选框值?

javascript - 是否可以在鼠标停止移动时触发事件?

javascript - 在ngFor中获取当前运行的元素

angular - 返回 promise 并从中创建可观察对象时,Typescript Angular2 出错