cakephp 3.8.13添加admad / cakephp-jwt-auth

问题描述

这个问题在堆栈溢出中被问了很多遍,但是我尝试了所有可接受的解决方

我是蛋糕PHP的新手,我被分配在我们的应用程序中添加JWT。以前,团队使用认的蛋糕会话。为了集成,我使用了admad/cakePHP-jwt-auth。因此,在AppController中

public function initialize()
    {
        parent::initialize();
        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Recurring');
        $this->loadComponent('Auth',[
                'storage' => 'Memory','authenticate' => [
                    'Form' => [
                        'fields' => [
                            'username' => 'user_name','password' => 'password',],'contain' => ['Roles']
                    ],'ADmad/JwtAuth.Jwt' => [
                        'parameter' => 'token','usermodel' => 'CbEmployees','fields' => [
                            'username' => 'id'
                        ],'queryDatasource' => true
                    ]
                ],'unauthorizedRedirect' => false,'checkAuthIn' => 'Controller.initialize'
            ]);
}

我必须使用CbEmployees这是我们的用户模型。

然后在我的自定义控制器中,添加我的登录功能

public function login()
    {
        $user = $this->Auth->identify();
        if (!$user) {
            $data = "Invalid login details";
        } else {
            $tokenId  = base64_encode(32);
            $issuedAt = time();
            $key = Security::salt();
            $data = JWT::encode(
                [
                    'alg' => 'HS256','id' => $user['id'],'sub' => $user['id'],'iat' => time(),'exp' =>  time() + 86400,$key
            );
        }
        $this->ApiResponse([
            "data" => $data
        ]);
    }

然后我使用带有身体的邮递员来调用功能

{
    "username": "developer","password": "dev2020"
}

我总是以 Invalid login details 的形式答复。因此建议的解决方案是检查密码数据类型和长度。密码为varchar(255)。另一种解决方案是检查实体中的密码。在我拥有的实体中

protected function _setPassword($password)
    {
        if (strlen($password) > 0) {
            return Security::hash($password,'sha1',true);
            // return (new DefaultPasswordHasher)->hash($password);
        }
    }

我特别问过为什么团队由于从蛋糕2迁移到蛋糕3而使用Security::hash($password,true);,所以他们不得不使用Invalid login details

为什么我总是得到{{1}}?我在这里做错了什么?使用应用程序时,我可以使用相同的凭据登录

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)