【发布时间】:2017-04-11 22:12:30
【问题描述】:
我在 Cakephp 3 中将 Angular 2 用于前端和后端。我在尝试登录时收到 401 Unauthorized 状态。我已经在 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']
]);
}
删除选项后 -
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;
}
});
}
我得到了回应
【问题讨论】:
-
看起来像是一个 CORS 问题,您需要在服务器上配置一些东西,或者标题中的一些东西不太正确。 developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
-
是的,我确实有同样的感觉,但没有得到解决方案,有什么建议吗?
-
@NeerajRathod,你修好了它并且工作正常吗?我正在解决同样的问题。我正在尝试使用 cakephp 3.4.0 和 Angular 2 创建登录和注册功能。你能帮帮我吗?
标签: angular cors jwt cakephp-3.0