Skip to content

Commit f052bd0

Browse files
committed
Refactor user attribute handling in provider repository
Use available socialite getter methods
1 parent 0306514 commit f052bd0

1 file changed

Lines changed: 46 additions & 26 deletions

File tree

src/UserProviderRepository.php

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class UserProviderRepository implements ProviderRepository
1919
public function exists(string $driver, SocialiteUser $user): bool
2020
{
2121
return $this->newUserQuery(Bartender::getUserModel())
22-
->where('email', $user->email)
22+
->where('email', $user->getEmail())
2323
->where(fn (Builder $query) => (
2424
$query
2525
->whereNull('provider_name')
@@ -35,51 +35,55 @@ public function updateOrCreate(string $driver, SocialiteUser $user): Authenticat
3535
{
3636
$model = Bartender::getUserModel();
3737

38+
/** @var Authenticatable $eloquent */
3839
$eloquent = $this->newUserQuery($model)->firstWhere([
39-
'email' => $user->email,
40+
'email' => $user->getEmail(),
4041
'provider_name' => $driver,
4142
]) ?? (new $model)->forceFill([
42-
'email' => $user->email,
43+
'email' => $user->getEmail(),
4344
'provider_name' => $driver,
4445
]);
4546

4647
$eloquent->forceFill(
47-
array_merge([
48-
'name' => $user->name,
49-
'provider_id' => $user->id,
50-
'password' => $eloquent->password ?? $this->hash($this->getNewPassword()),
51-
],
52-
$this->isUsingSoftDeletes($model)
53-
? ['deleted_at' => null]
54-
: [],
55-
$this->isVerifyingEmails($model)
56-
? ['email_verified_at' => $eloquent->email_verified_at ?? now()]
57-
: [],
58-
$this->isStoringTokens($model)
59-
? [
60-
'provider_access_token' => $user->token,
61-
'provider_refresh_token' => $this->getRefreshToken($user, $eloquent->provider_refresh_token),
62-
] : [],
63-
)
48+
$this->getUserAttributes($model, $user, $eloquent)
6449
)->save();
6550

6651
return $eloquent;
6752
}
6853

6954
/**
70-
* Hash the given value.
55+
* Get the user attributes to be stored.
56+
*
57+
* @param class-string $model
7158
*/
72-
protected function hash(string $value): string
59+
protected function getUserAttributes(string $model, SocialiteUser $user, Authenticatable $eloquent): array
7360
{
74-
return Hash::make($value);
61+
return array_merge(
62+
[
63+
'name' => $user->getName(),
64+
'provider_id' => $user->getId(),
65+
'password' => $eloquent->getAuthPassword() ?? $this->getHashedValue($this->getNewPassword()),
66+
],
67+
$this->isUsingSoftDeletes($model)
68+
? ['deleted_at' => null]
69+
: [],
70+
$this->isVerifyingEmails($model)
71+
? ['email_verified_at' => $eloquent->email_verified_at ?? now()]
72+
: [],
73+
$this->isStoringTokens($model)
74+
? [
75+
'provider_access_token' => $this->getAccessToken($user, $eloquent->provider_access_token),
76+
'provider_refresh_token' => $this->getRefreshToken($user, $eloquent->provider_refresh_token),
77+
] : [],
78+
);
7579
}
7680

7781
/**
78-
* Get a new password for the user.
82+
* Get the access token from the Socialite user.
7983
*/
80-
protected function getNewPassword(): string
84+
protected function getAccessToken(SocialiteUser $user, ?string $default = null): ?string
8185
{
82-
return Str::random();
86+
return $user->token ?? $default;
8387
}
8488

8589
/**
@@ -92,6 +96,22 @@ protected function getRefreshToken(SocialiteUser $user, ?string $default = null)
9296
?? $default;
9397
}
9498

99+
/**
100+
* Hash the given value.
101+
*/
102+
protected function getHashedValue(string $value): string
103+
{
104+
return Hash::make($value);
105+
}
106+
107+
/**
108+
* Get a new password for the user.
109+
*/
110+
protected function getNewPassword(): string
111+
{
112+
return Str::random();
113+
}
114+
95115
/**
96116
* Get a new user query instance.
97117
*

0 commit comments

Comments
 (0)