这是一个简单的问题。
我正在尝试使用 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'.
最佳答案
正如评论中提到的,这是由于 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/