diff --git a/src/Authorize/Header/BasicMethod.php b/src/Authorize/Header/BasicMethod.php
index eda349f..954dde7 100644
--- a/src/Authorize/Header/BasicMethod.php
+++ b/src/Authorize/Header/BasicMethod.php
@@ -3,13 +3,14 @@
 namespace Ulmus\User\Authorize\Header;
 
 use Psr\Http\Message\ServerRequestInterface;
+use Ulmus\User\Entity\BasicAuthUserInterface;
 use Ulmus\User\Entity\UserInterface;
 use Ulmus\User\Lib\Authorize;
 
-class BasicMethod
+class BasicMethod implements MethodInterface
 {
     public function __construct(
-        protected UserInterface $user,
+        protected BasicAuthUserInterface $user,
         protected string|array $arguments
     ) {}
 
@@ -28,7 +29,7 @@ class BasicMethod
             throw new \RuntimeException("A password must be provided");
         }
 
-        ( new Authorize($this->user) )->authenticate([ 'email' => $userName, 'username' => $userName ], $password);
+        ( new Authorize($this->user) )->authenticate([ $this->user->usernameField() => $userName ], $password);
 
         return $this->user->loggedIn();
     }
diff --git a/src/Authorize/Header/BearerMethod.php b/src/Authorize/Header/BearerMethod.php
index 86147f4..9b627ae 100644
--- a/src/Authorize/Header/BearerMethod.php
+++ b/src/Authorize/Header/BearerMethod.php
@@ -5,7 +5,7 @@ namespace Ulmus\User\Authorize\Header;
 use Psr\Http\Message\ServerRequestInterface;
 use Ulmus\User\Entity\UserInterface;
 
-class BearerMethod
+class BearerMethod implements MethodInterface
 {
     public function __construct(
         protected UserInterface $user,
diff --git a/src/Authorize/Header/DigestMethod.php b/src/Authorize/Header/DigestMethod.php
index ddf2a8b..7968a85 100644
--- a/src/Authorize/Header/DigestMethod.php
+++ b/src/Authorize/Header/DigestMethod.php
@@ -5,7 +5,7 @@ namespace Ulmus\User\Authorize\Header;
 use Psr\Http\Message\ServerRequestInterface;
 use Ulmus\User\Entity\DigestAuthUserInterface;
 
-class DigestMethod
+class DigestMethod implements MethodInterface
 {
     public function __construct(
         protected DigestAuthUserInterface $user,
diff --git a/src/Authorize/Header/MethodInterface.php b/src/Authorize/Header/MethodInterface.php
new file mode 100644
index 0000000..3f12ed1
--- /dev/null
+++ b/src/Authorize/Header/MethodInterface.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Ulmus\User\Authorize\Header;
+
+use Psr\Http\Message\ServerRequestInterface;
+
+interface MethodInterface
+{
+    public function execute(ServerRequestInterface $request) : bool;
+}
\ No newline at end of file
diff --git a/src/Authorize/HeaderAuthentication.php b/src/Authorize/HeaderAuthentication.php
index e5e5b17..fc4c80e 100644
--- a/src/Authorize/HeaderAuthentication.php
+++ b/src/Authorize/HeaderAuthentication.php
@@ -15,24 +15,27 @@ class HeaderAuthentication implements AuthorizeMethodInterface
 
             switch(strtolower($method)) {
                 case "basic":
-                    return (new Header\BasicMethod($user, $value))->execute($request);
+                    $methodObj = new Header\BasicMethod($user, $value);
+                break;
 
                 case "digest":
                     if (! $user instanceof DigestAuthUserInterface) {
                         throw new \RuntimeException("Your user entity must provide a valid hash of `user:realm:password` ");
                     }
 
-                    return (new Header\DigestMethod($user, $value))->execute($request);
+                    $method = new Header\DigestMethod($user, $value);
+                break;
 
                 case "bearer":
-                    return (new Header\BearerMethod($user, $value))->execute($request);
+                    $method = new Header\BearerMethod($user, $value);
+                break;
 
                 default:
                     throw new \InvalidArgumentException("An authentication method must be provided");
             }
         }
 
-        return false;
+        return isset($methodObj) && $methodObj->execute($request);
     }
 
 
diff --git a/src/Entity/BasicAuthUserInterface.php b/src/Entity/BasicAuthUserInterface.php
new file mode 100644
index 0000000..2c939ca
--- /dev/null
+++ b/src/Entity/BasicAuthUserInterface.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Ulmus\User\Entity;
+
+interface BasicAuthUserInterface extends UserInterface
+{
+    public function usernameField() : string;
+}
\ No newline at end of file
diff --git a/src/Entity/DigestAuthUserInterface.php b/src/Entity/DigestAuthUserInterface.php
index 7a4e04e..ff049e7 100644
--- a/src/Entity/DigestAuthUserInterface.php
+++ b/src/Entity/DigestAuthUserInterface.php
@@ -2,7 +2,7 @@
 
 namespace Ulmus\User\Entity;
 
-interface DigestAuthUserInterface
+interface DigestAuthUserInterface extends UserInterface
 {
     # Represent a hash (md5, sha256, ...) of username:realm:password
     public function getSecretHash() : string;
diff --git a/src/Entity/User.php b/src/Entity/User.php
index 16cab54..4f6d0fa 100644
--- a/src/Entity/User.php
+++ b/src/Entity/User.php
@@ -77,7 +77,7 @@ abstract class User implements UserInterface {
 
     public function verifyPassword(string $password) : bool
     {
-        return password_verify($password, $this->password);
+        return password_verify($password, $this->password ?? null);
     }
 
     public function fullName() : string