{
$provider = request()->provider;
if (in_array($provider, $this->providers, true)) {
- $user = User::fromProvider($provider);
- if ($user) {
- Auth::login($user, true);
- debug('callback', $user);
- return redirect('/test');
- }
+ $user = Socialite::driver($provider)->user();
+ $authUser = $this->findOrCreateUser($user, $provider);
+
+ Auth::login($authUser, true);
+ return redirect('/test');
}
}
+
+ private function findOrCreateUser($user, $provider)
+ {
+ if ($authUser = User::where('id', $user->id)->first()) {
+ $authUser->update([
+ 'id' => $user->id,
+ 'avatar' => $user->avatar,
+ 'name' => $user->name,
+ 'username' => $user->nickname,
+ 'url' => 'http://' . $provider . '.com/' . $user->nickname
+ ]);
+
+ return $authUser;
+ }
+
+ return User::create([
+ 'id' => $user->id,
+ 'avatar' => $user->avatar,
+ 'name' => $user->name,
+ 'username' => $user->nickname,
+ 'url' => 'http://' . $provider . '.com/' . $user->nickname,
+ 'provider' => $provider
+ ]);
+
+
+ }
}
\ No newline at end of file