繁体   English   中英

Cakephp 4 登录测试

[英]Cakephp 4 logintest

我正在为我的 UserController 做测试,但我在登录测试时遇到了问题。 我将 cakephp4 与 phpunit 一起使用。

我正在做的测试是这样的:

   public function testLogin(): void
   {
       $this->enableSecurityToken();
       $this->enableCsrfToken();
       $this->get('/user/login');
       $this->assertResponseOk();
 
       $this->post('/user/login', [
           'DNI_CIF' => '22175395Z',
           'password' => '$2y$10$ND67aMGqm.qK86MW1wuW9OQLC9vyJQGUn2HnLuSInwrFbXQKBT.V.'
       ]);
 
       $this->assertResponseCode(302); //Si correcto redirige
   //    $this->assertSession(1, 'Auth.User.id');
   }

我的用户控制器:

  public function login()
   {
       $this->request->allowMethod(['get', 'post']);
       $result = $this->Authentication->getResult();
       // regardless of POST or GET, redirect if user is logged in
       if ($result && $result->isValid()) {
        return $this->redirect('/');
       }
       // display error if user submitted and authentication failed
       if ($this->request->is('post') && !$result->isValid()) {
           $this->Flash->error(__('Alias de usuario o contraseña incorrecta.'));
       }
   }

我的应用程序:

  public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface
   {
       $authenticationService = new AuthenticationService([
           'unauthenticatedRedirect' => Router::url('/user/login'),
           'queryParam' => 'redirect',
       ]);
  
       // Load identifiers, ensure we check email and password fields
       $authenticationService->loadIdentifier('Authentication.Password', [
           'resolver' => [
               'className' => 'Authentication.Orm',
               'userModel' => 'User',
               ],
           'fields' => [
               'username' => 'DNI_CIF',
               'password' => 'password',
           ]
       ]);
  
 
       // Load the authenticators, you want session first
       $authenticationService->loadAuthenticator('Authentication.Session');
       // Configure form data check to pick email and password
       $authenticationService->loadAuthenticator('Authentication.Form', [
           'fields' => [
               'username' => 'DNI_CIF',
               'password' => 'password',
           ],
           'loginUrl' => Router::url('/user/login'),
       ]);
  
       return $authenticationService;
   }

但我有这个错误:


.......object(Authentication\Authenticator\Result)#826 (3) {
  ["_status":protected]=>
  string(27) "FAILURE_CREDENTIALS_MISSING"
  ["_data":protected]=>
  NULL
  ["_errors":protected]=>
  array(1) {
    [0]=>
    string(27) "Login credentials not found"
  }
}

有人可以告诉我我做错了什么吗?

我尝试了几种组合,例如:


           'username' => '22175395Z',
           'password' => '$2y$10$ND67aMGqm.qK86MW1wuW9OQLC9vyJQGUn2HnLuSInwrFbXQKBT.V.'

要么:


           'DNI_CIF' => '22175395Z',
           'password' => 'prueba'

要么


           'username' => '22175395Z',
           'password' => 'prueba'

但没有任何效果。

为了根据存储在数据库中的密码进行验证,必须对存储的密码进行哈希处理,而提交的密码不得进行哈希处理。

如果有人遇到同样的问题,要补充一点,如果您使用在 Fixture 中添加的用户登录,请小心,因为它的密码可能不会被散列,登录测试将不起作用。 我添加了一个用户并在登录测试中使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM