MultiTenantAuthService.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Services;
  3. use Illuminate\Support\Facades\DB;
  4. use Illuminate\Support\Facades\Log;
  5. use Illuminate\Support\Facades\Hash;
  6. class MultiTenantAuthService
  7. {
  8. /**
  9. * Authenticate user against both master and tenant databases
  10. */
  11. public static function authenticate($email, $password)
  12. {
  13. try {
  14. $masterUser = DB::connection('mysql')->table('users')
  15. ->where('email', $email)
  16. ->first();
  17. if (!$masterUser) {
  18. Log::info('User not found in master database', ['email' => $email]);
  19. return false;
  20. }
  21. if (!Hash::check($password, $masterUser->password)) {
  22. Log::info('Password mismatch in master database', ['email' => $email]);
  23. return false;
  24. }
  25. config(['database.connections.temp_tenant' => [
  26. 'driver' => 'mysql',
  27. 'host' => '127.0.0.1',
  28. 'port' => '3306',
  29. 'database' => $masterUser->tenant_database,
  30. 'username' => $masterUser->tenant_username,
  31. 'password' => $masterUser->tenant_password,
  32. ]]);
  33. $tenantUser = DB::connection('temp_tenant')->table('users')
  34. ->where('email', $email)
  35. ->first();
  36. if (!$tenantUser) {
  37. Log::info('User not found in tenant database', [
  38. 'email' => $email,
  39. 'tenant_db' => $masterUser->tenant_database
  40. ]);
  41. return false;
  42. }
  43. if (!Hash::check($password, $tenantUser->password)) {
  44. Log::info('Password mismatch in tenant database', [
  45. 'email' => $email,
  46. 'tenant_db' => $masterUser->tenant_database
  47. ]);
  48. return false;
  49. }
  50. Log::info('Authentication successful for both databases', [
  51. 'email' => $email,
  52. 'tenant_db' => $masterUser->tenant_database
  53. ]);
  54. return $masterUser;
  55. } catch (\Exception $e) {
  56. Log::error('Authentication error', [
  57. 'email' => $email,
  58. 'error' => $e->getMessage()
  59. ]);
  60. return false;
  61. }
  62. }
  63. }