Я использую социальную аутентификацию Laravel с Socialite, я могу войти в систему успешно, но я хочу создать токен доступа для своего собственного приложения, но не токены google, twitter и facebook.
Я могу создать токен доступа, но он создается каждый раз, когда пользователь входит в систему с помощью Socialite. Я хочу, чтобы токен был создан при первом входе пользователя в Socialite. Кроме того, при создании токена отсутствует user_id.
Вот мой логинконтроллер
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'
User_id отсутствует, и токены были созданы дважды для одного и того же человека (войдите в систему с помощью Google).
У пользователя нет пароля, потому что он аутентифицируется с помощью Socialite.






Вы могли бы захотеть сделать что-нибудь вроде
// Retrieve user by email, or create it with the email and first_name attributes...
User::firstOrCreate(
['email' => $providerUser->getEmail()],
['first_name' => $providerUser->getName()]
]);
и установлено ли поле вашего адреса электронной почты как уникальное в базе данных?
Прохладный. Это означает, что вы не сможете создать вторую запись с тем же адресом электронной почты прямо из-за ограничений вашей базы данных.
Да, в таблице «пользователь» он создается только один раз, но в таблице «oauth_access_tokens» он создается каждый раз при входе в систему ... в этом проблема, я хочу один токен для одного пользователя.
Поэтому вместо выполнения User::firstOrCreate вам, возможно, придется обновить существующие отношения для сохраненных пользователей $user->socialProviders()->update([ 'provider_id' => $providerUser->getId(),provider_name' => $provider]);
Да, я могу создать нового пользователя, получив его адрес электронной почты или что-то в этом роде, но я хочу создать нового пользователя И сгенерировать токен доступа моего приложения для этого нового пользователя.