我想处理一个令牌。但得到消息:
“承诺”
类型中不存在“令牌”属性我有以下代码。我得到了一个带有属性令牌的json。顺便说一下,我使用的是一个使用Angular 2的教程。我已经在没有['token']的情况下尝试过了。但没有成功。我也有一个帖子的接口,但我没有使用它来消除错误。它也不适用于界面。
这是我的代码:
signin(email: string, password: string) {
return this.http.post<any>('http://127.0.0.1:8000/api/userLogin',
{ email: email, password: password },
this.httpOptions).map((response: Response) => {
const token = response.json()['token'];
const base64Url = token.split('.')[1];
const base64 = base64Url.replace('-', '+').replace('_', '/');
return JSON.parse(window.atob(base64));
});
}
教程:
https://www.youtube.com/watch?v=pT9_FngJuzY&t=321s
顺便说一句,在这种情况下,我使用laravel / passport。
success:
{token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjllOW…lsJiIWVmiiNY1Ft02MSWGS-Thx7_warYrUucP8bPHHnyMCfnU"}
答案 0 :(得分:1)
为什么不使用Serializable类。
这是我针对此问题的解决方案,方法是参考:Angular2 HTTP GET - Cast response into full object
export class MdfResponse {
public message?: string;
public token?: string;
constructor() {}
fromJSON(json) {
for (var propName in json)
this[propName] = json[propName];
return this;
}
}
调用登录功能时
signIn(user: User) { const body = JSON.stringify(user);
headers: new HttpHeaders({"Content-Type": "application/json"})
return this.http.post("http://localhost:3000/users/login", body, httpOption)
.pipe(map((response) => {
let test = new AIPResponse().fromJSON(response);
localStorage.setItem("token", test.token);
localStorage.setItem("userId", test.message);
}))
.pipe(catchError((error) => throwError(error)));
}
希望获得帮助!