Я использую социальную аутентификацию Laravel с Socialite, я могу войти в систему успешно, но я хочу создать токен доступа для своего собственного приложения, но не токен google, twitter и facebook.
Я могу создать токен доступа, но он создается каждый раз, когда пользователь входит в систему через Socialite. Я хочу, чтобы токен был создан при первом входе пользователя в Socialite. Кроме того, идентификатор пользователя отсутствует при создании токена.
Вот мой логинКонтроллер
public function handleProviderCallback($provider)
{
try {
$user = Socialite::driver($provider)->stateless()->user();
} catch (Exception $e) {
return redirect('/login');
}
$authUser = $this->findOrCreateUser($user, $provider);
Auth::login($authUser,false);
$user = User::find($authUser['user_id']);
return $this->getBearerTokenByUser($user, 3, true);
// return redirect($this->redirectTo);
return $user;
}
public function findOrCreateUser($providerUser, $provider)
{
$account = SocialProvider::whereProviderName($provider)
->whereProviderId($providerUser->getId())
->first();
if ($account) {
return $account->user;
} else {
$user = User::whereEmail($providerUser->getEmail())->first();
if (! $user) {
$user = User::firstOrCreate([
'email' => $providerUser->getEmail(),
'first_name' => $providerUser->getName(),
]);
}
$user->socialProviders()->create([
'provider_id' => $providerUser->getId(),
'provider_name' => $provider,
]);
return $user;
}
Вот данные базы данных таблица 'oauth_access_tokens'
таблица 'users_key'
Идентификатор пользователя отсутствует, и токены были созданы дважды для одного и того же человека (войдите с помощью Google).
У пользователя нет пароля, поскольку он аутентифицируется с помощью Socialite.