fix(auth): resolve login identities by active email and role

This commit is contained in:
2026-09-04 14:17:19 -03:00
parent e4db36e650
commit 99594b17e7
7 changed files with 28 additions and 8 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Domains\Auth\Controllers;
use App\Domains\Auth\Requests\ScannerLoginRequest;
use App\Domains\Auth\Resources\UserResource;
use App\Domains\Auth\Services\PasswordLoginService;
use App\Domains\Authorization\Enums\RoleCode;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
@@ -22,6 +23,7 @@ class ScannerLoginController extends Controller
$credentials['password'],
$request->ip(),
$request->userAgent(),
RoleCode::from($credentials['rol_codigo'] ?? RoleCode::Scanner->value),
);
$expirationMinutes = (int) config('sanctum.expiration');

View File

@@ -2,4 +2,16 @@
namespace App\Domains\Auth\Requests;
class ScannerLoginRequest extends AdminAppLoginRequest {}
use App\Domains\Authorization\Enums\RoleCode;
use Illuminate\Validation\Rule;
class ScannerLoginRequest extends AdminAppLoginRequest
{
public function rules(): array
{
return [
...parent::rules(),
'rol_codigo' => ['sometimes', Rule::in([RoleCode::Scanner->value, RoleCode::AdminApp->value])],
];
}
}

View File

@@ -11,7 +11,7 @@ class AdminCredentialVerifier
public function verify(string $email, string $password): bool
{
$admin = User::query()
->where('email', mb_strtolower(trim($email)))
->where('active_email', mb_strtolower(trim($email)))
->where('rol_codigo', RoleCode::Admin->value)
->first();

View File

@@ -3,6 +3,7 @@
namespace App\Domains\Auth\Services;
use App\Domains\Auth\Models\User;
use App\Domains\Authorization\Enums\RoleCode;
use App\Domains\Notification\Events\UserRegistered;
use App\Domains\Tenant\Models\Tenant;
use App\Domains\Tenant\Support\TenantDomainNormalizer;
@@ -124,12 +125,12 @@ class GoogleAuthService
]);
}
$user = User::query()->where('google_id', $googleId)->first();
$user = User::query()->where('rol_codigo', RoleCode::User->value)->where('google_id', $googleId)->first();
if ($user) {
return $user;
}
$user = User::query()->where('email', $email)->first();
$user = User::query()->where('rol_codigo', RoleCode::User->value)->where('active_email', mb_strtolower(trim($email)))->first();
if ($user) {
$user->forceFill(['google_id' => $googleId])->save();

View File

@@ -78,6 +78,7 @@ class PasswordLoginService
string $password,
?string $ipAddress,
?string $userAgent,
RoleCode $role = RoleCode::Scanner,
): User {
return $this->authenticateUser(
$email,
@@ -85,10 +86,12 @@ class PasswordLoginService
null,
$ipAddress,
$userAgent,
null,
$role,
true,
PermissionCode::ScanTickets->value,
PasswordResetRequested::CHANNEL_SCANNER,
$role === RoleCode::AdminApp
? PasswordResetRequested::CHANNEL_ADMINAPP
: PasswordResetRequested::CHANNEL_SCANNER,
);
}
@@ -120,7 +123,7 @@ class PasswordLoginService
$passwordResetChannel,
): array {
$user = User::query()
->where('email', $normalizedEmail)
->where('active_email', $normalizedEmail)
->when(
$requiredRole !== null,
fn ($query) => $query->where('rol_codigo', $requiredRole->value),

View File

@@ -105,7 +105,8 @@ class InvitationPurchaseProvisioner
private function userId(DateTimeInterface $now): int
{
$user = DB::table('users')
->where('email', self::USER_EMAIL)
->where('active_email', self::USER_EMAIL)
->where('rol_codigo', 'user')
->whereNull('deleted_at')
->first();

View File

@@ -46,6 +46,7 @@ class ScannerLoginControllerTest extends TestCase
$response = $this->postJson('/api/v1/scanner/login', [
'email' => ' SCANNER@EXAMPLE.COM ',
'password' => 'secret123',
'rol_codigo' => RoleCode::AdminApp->value,
]);
$response