cakephp 登录操作:

fzwojiic  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(176)

我正在尝试从CakepHP设置新的身份验证方法。登录时,我在调试中收到缺少凭据的消息。在请求POST数据中,提交了电子邮件和密码字段。我是否缺少了什么?

/**
     * Login method
     */
    public function login()
    {
        $result = $this->Authentication->getResult();

        // regardless of POST or GET, redirect if user is logged in
        if ($result->isValid()) {
            $redirect = $this->request->getQuery('redirect', ['controller' => 'Pages', 'action' => 'display', 'home']);
            return $this->redirect($redirect);
        }

        // display error if user submitted and authentication failed
        if ($this->request->is(['post']) && !$result->isValid()) {
            $this->Flash->error('Invalid username or password');
        }
    }

public function getAuthenticationService(ServerRequestInterface $request, ResponseInterface $response)
    {
        $service = new AuthenticationService();

        $fields = [
            'username' => 'email',
            'password' => 'password'
        ];

        // Load identifiers
        $service->loadIdentifier('Authentication.Password', compact('fields'));

        // Load the authenticators, you want session first
        $service->loadAuthenticator('Authentication.Session');
        $service->loadAuthenticator('Authentication.Form', [
            'fields' => $fields,
            'loginUrl' => '/users/login'
        ]);

        return $service;
    }

编辑:在编辑了带有username/post字段的Form Authenticator选项后,我得到了以下内容
错误:未找到失败标识
SQL调试表明在Users表中找到了该记录。

SELECT 
  Users.id AS `Users__id`, 
  Users.email AS `Users__email`, 
  Users.password AS `Users__password`, 
  Users.role AS `Users__role`, 
  Users.created AS `Users__created`, 
  Users.modified AS `Users__modified` 
FROM 
  users Users 
WHERE 
  Users.email = 'my@my.com' 
LIMIT 
  1

用户表结构

id Primary key  int(11)
email   varchar(255)    utf8mb4_general_ci
password    varchar(255)    utf8mb4_general_ci
role    varchar(255)
created datetime
modified    datetime
q43xntqr

q43xntqr1#

修正了密码为纯文本的问题。添加了一个新用户,默认密码为哈希。

i34xakig

i34xakig2#

如果你还想知道你做了什么。在我的移民我有这个:

//In Users Migration 
$table->addColumn('password', 'char', [
            'default' => null,
            'null' => false,
        ]);

使用以下命令更改它:

$table->addColumn('password', 'string', [
        'default' => null,
        'limit' => 255,
        'null' => false,
    ]);

而且它会起作用的。你必须把你的密码列的列类型设置为character_varying才能使它起作用。

yzxexxkh

yzxexxkh3#

一个可能的非常常见的错误是,在定义表的字段时,password***字段被声明为较小的长度(10-15个字符),而在使用身份验证组件时,密码将变成一个更大的***哈希,因此建议声明长度为255个字符的密码字段,以避免在尝试登录用户时带来不便。

相关问题