Войдите в Laravel с помощью Socialite (google, facebook и т. д.) И создайте токен доступа моего собственного приложения

Я использую социальную аутентификацию 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.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
809
1

Ответы 1

Вы могли бы захотеть сделать что-нибудь вроде

// Retrieve user by email, or create it with the email and first_name attributes...

User::firstOrCreate(
  ['email' => $providerUser->getEmail()],
  ['first_name'  => $providerUser->getName()]
]);

Да, я могу создать нового пользователя, получив его адрес электронной почты или что-то в этом роде, но я хочу создать нового пользователя И сгенерировать токен доступа моего приложения для этого нового пользователя.

lyriclau 13.01.2019 21:52

и установлено ли поле вашего адреса электронной почты как уникальное в базе данных?

usrNotFound 14.01.2019 00:48

Прохладный. Это означает, что вы не сможете создать вторую запись с тем же адресом электронной почты прямо из-за ограничений вашей базы данных.

usrNotFound 15.01.2019 02:28

Да, в таблице «пользователь» он создается только один раз, но в таблице «oauth_access_tokens» он создается каждый раз при входе в систему ... в этом проблема, я хочу один токен для одного пользователя.

lyriclau 15.01.2019 10:31

Поэтому вместо выполнения User::firstOrCreate вам, возможно, придется обновить существующие отношения для сохраненных пользователей $user->socialProviders()->update([ 'provider_id' => $providerUser->getId(),provider_name' => $provider]);

usrNotFound 15.01.2019 23:26

Другие вопросы по теме