您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

CreateUserFromProvider.php 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Actions\FilamentCompanies;
  3. use App\Models\Company;
  4. use App\Models\User;
  5. use Illuminate\Support\Facades\DB;
  6. use Laravel\Socialite\Contracts\User as ProviderUserContract;
  7. use Wallo\FilamentCompanies\Contracts\CreatesConnectedAccounts;
  8. use Wallo\FilamentCompanies\Contracts\CreatesUserFromProvider;
  9. use Wallo\FilamentCompanies\Enums\Feature;
  10. use Wallo\FilamentCompanies\FilamentCompanies;
  11. class CreateUserFromProvider implements CreatesUserFromProvider
  12. {
  13. /**
  14. * The creates connected accounts instance.
  15. */
  16. public CreatesConnectedAccounts $createsConnectedAccounts;
  17. /**
  18. * Create a new action instance.
  19. */
  20. public function __construct(CreatesConnectedAccounts $createsConnectedAccounts)
  21. {
  22. $this->createsConnectedAccounts = $createsConnectedAccounts;
  23. }
  24. /**
  25. * Create a new user from a social provider user.
  26. */
  27. public function create(string $provider, ProviderUserContract $providerUser): User
  28. {
  29. return DB::transaction(function () use ($providerUser, $provider) {
  30. return tap(User::create([
  31. 'name' => $providerUser->getName(),
  32. 'email' => $providerUser->getEmail(),
  33. ]), function (User $user) use ($providerUser, $provider) {
  34. $user->markEmailAsVerified();
  35. if ($this->shouldSetProfilePhoto($providerUser)) {
  36. $user->setProfilePhotoFromUrl($providerUser->getAvatar());
  37. }
  38. $user->switchConnectedAccount(
  39. $this->createsConnectedAccounts->create($user, $provider, $providerUser)
  40. );
  41. // $this->createCompany($user); // Commented out to prevent creating a company for a Socialite user
  42. });
  43. });
  44. }
  45. private function shouldSetProfilePhoto(ProviderUserContract $providerUser): bool
  46. {
  47. return Feature::ProviderAvatars->isEnabled() &&
  48. FilamentCompanies::managesProfilePhotos() &&
  49. $providerUser->getAvatar();
  50. }
  51. /**
  52. * Create a personal company for the user.
  53. */
  54. protected function createCompany(User $user): void
  55. {
  56. $user->ownedCompanies()->save(Company::forceCreate([
  57. 'user_id' => $user->id,
  58. 'name' => explode(' ', $user->name, 2)[0] . "'s Company",
  59. 'personal_company' => true,
  60. ]));
  61. }
  62. }