gpt4 book ai didi

angular - 获取 401 未经授权的 Post 方法 [前端 - Angular 2 和后端 - Cakephp 3]

转载 作者:太空狗 更新时间:2023-10-29 19:30:14 24 4
gpt4 key购买 nike

我在 Cakephp 3 的前端和后端使用 Angular 2。我在尝试登录时收到 401 未授权状态。我在 cakephp 3 中配置了 JWT,它在 POSTMAN 中运行良好。但不适用于 Angular。

这是我的 TypeScript 代码

loginToken(uname: string, pwd: string): Observable<boolean>{
let json = JSON.stringify({ username: uname , password: pwd});
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers });

return this.http.post('http://localhost/crm/crm/api/users/token', json, options)
.map((response: Response) => {
let token = response.json() && response.json().token;
if (token) {
this.token = token;
localStorage.setItem('currentUser', JSON.stringify({ username: uname, token: token }));
return true;
} else {
return false;
}
});
}

Cakephp 3 代码 - 服务器端

public function token()
{
$user = $this->Auth->identify();
if (!$user) {
throw new UnauthorizedException('Invalid username or password');
}

$this->set([
'success' => true,
'data' => [
'token' => JWT::encode([
'sub' => $user['id'],
'exp' => time() + 604800
],
Security::salt())
],
'_serialize' => ['success', 'data']
]);

}

以下是部分截图 enter image description here

enter image description here

enter image description here请帮我解决这个问题。

删除选项后-

loginToken(uname: string, pwd: string): Observable<boolean>{
let json = JSON.stringify({ username: uname , password: pwd});
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let options = new RequestOptions({ headers: headers });

return this.http.post('http://localhost/crm/crm/api/users/token', json, {headers: headers })
.map((response: Response) => {
let token = response.json() && response.json().token;
if (token) {
this.token = token;
localStorage.setItem('currentUser', JSON.stringify({ username: uname, token: token }));
return true;
} else {
return false;
}
});
}

我得到的回复

enter image description here

enter image description here

最佳答案

您的问题是内容类型 header 丢失或错误。

对于不发送 OPTIONS 请求的登录,您的内容类型应该是标准表单类型之一: application/x-www-form-urlencoded 或 multipart/form-data

我想,text/pain 可能也有用,但我自己没用过。

编辑:实际上有一个关于它的 SO:How to disable OPTIONS request?

关于angular - 获取 401 未经授权的 Post 方法 [前端 - Angular 2 和后端 - Cakephp 3],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com