JWT 身份验证 - 为新注册的用户请求令牌时遇到问题
Posted
技术标签:
【中文标题】JWT 身份验证 - 为新注册的用户请求令牌时遇到问题【英文标题】:JWT Authentication - Having trouble requesting the Token for a newly registered User 【发布时间】:2017-10-23 16:47:56 【问题描述】:我正在尝试将 JWT 身份验证添加到我的 cakephp3 Rest API,遵循此 tutorial
在我的 UsersController.php
文件中创建 /register 操作并注册新用户后,我无法验证令牌请求。 (由于我正在制作的应用程序类型,我已将“用户”一词更改为“艺术家”)。因此,在注册了新的艺术家(用户)后,我会看到一个 201 状态代码,表示它是成功的,因此给了我该艺术家(用户)的“令牌”。然后我通过浏览到http://jwt.io/ 并将令牌粘贴到其中来验证这一点,这也向我显示成功。展望未来,我现在尝试在我的ArtistsController.php
文件中实现 JWT 令牌请求,方法是通过 JSON 发布艺术家(用户)的电子邮件和密码来请求令牌。这是我的ArtistsController.php
代码:
<?php
namespace App\Controller\Api;
use App\Controller\Api\AppController;
use Cake\Event\Event;
use Cake\Network\Exception\UnauthorizedException;
use Cake\Utility\Security;
use Firebase\JWT\JWT;
class ArtistsController extends AppController
public function initialize()
parent::initialize();
$this->Auth->allow(['add', 'token']);
//Artists registration
public function add()
$this->Crud->on('afterSave', function(Event $event)
if ($event->subject->created)
$this->set('data', [
'id' => $event->subject->entity->id,
'token' => JWT::encode(
[
'sub' => $event->subject->entity->id,
'exp' => time() + 604800
],
Security::salt())
]);
$this->Crud->action()->config('serialize.data', 'data');
);
return $this->Crud->execute();
//Verify Token request
public function token()
$artist = $this->Auth->identify();
if (!$artist)
throw new UnauthorizedException('Invalid email or password');
$this->set([
'success' => true,
'data' => [
'token' => JWT::encode([
'sub' => $artist['id'],
'exp' => time() + 604800
],
Security::salt())
],
'_serialize' => ['success', 'data']
]);
public $paginate = [
'page' => 1,
'limit' => 500,
'maxLimit' => 500,
'contain' => ['Parlours', 'Tags']
];
当我尝试通过为新创建的艺术家(用户)请求令牌来验证设置时,使用 API 测试工具 CocoaRestClient 将 JSON 数据发布到我的 API,它显示:
"message": "Invalid email or password",
"url": "/api/artists/token",
"code": 401
即使凭据有效且正确。我对我的数据库和代码上的所有内容进行了两次和三次检查,没有遗漏任何小东西,例如我的 API 测试工具中的逗号。为了确定,我什至注册了一位新艺术家(用户)。在现在尝试请求令牌之前,一切都是成功的(即使已经创建并验证了令牌)。
以前有人遇到过这个问题吗?
理论上它应该可以工作,因为电子邮件和密码是有效的,但它根本就没有。
【问题讨论】:
@RogarSSD,请帮我回答这个问题***.com/questions/47995364/… 【参考方案1】:您是否更改了 AppController.php 中关于 Artist Model 的 auth 组件配置,即 'userModel' => 'Artists'
【讨论】:
有效!谢谢你。我一直在扯头发这么久!你是明星! @Sebastian 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。谢谢。以上是关于JWT 身份验证 - 为新注册的用户请求令牌时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 api 请求标头中插入 api 身份验证所需的 jwt 令牌?