Laravel Socialite для мобильных приложений с использованием API

#api #mobile #laravel-5.7 #laravel-socialite

#API #Мобильный #laravel-5.7 #laravel-socialite

Вопрос:

Я использую пакет Laravel Socialite для аутентификации в социальных сетях (Facebook, Gmail), создания учетной записи и входа на веб-сайт, и все работает нормально.

Теперь мне нужно предоставить ту же функцию на мобильных устройствах, но пока я не получаю никаких полезных указаний о том, как и что нужно сделать в этом случае.

У меня есть таблица users, в которой хранится информация пользователя, и таблица social_providers, в которой хранятся user_id и provider_id, возвращаемые socialite с использованием приведенного ниже кода.

 public function handleProviderCallback(Request $request, $provider = null) {

    try {
        $socialUser = Socialite::driver($provider)->user();
    } catch (Exception $e) {
        return redirect('/');
    }
    //check if we have logged provider
    $socialProvider = SocialProvider::where('provider_id', $socialUser->getId())->first();
    if (!$socialProvider) {
        $name = explode(' ', $socialUser->getName(), 2);
        $first_name = $name[0];
        $last_name = $name[1];
        //create a new user and provider
        $user = User::firstOrCreate(
                        ['email' => $socialUser->getEmail()], ['last_name' => $last_name,
                    'first_name' => $first_name,
                    'email_verified_at' => date('Y-m-d H:i:s')]
        );
        $user->socialProviders()->create(
                ['provider_id' => $socialUser->getId(), 'provider' => $provider]
        );
    } else {
        $user = $socialProvider->user;
    }

    auth()->login($user);

    return redirect('/');
}
 

Теперь в случае с мобильным телефоном, что нужно сделать. Должен ли я использовать Android SDK для мобильных устройств, и это отправит информацию о пользователе и provider_id на серверную часть? ИЛИ что-то нужно сделать на стороне серверной части Laravel? Спасибо, если кто-нибудь может подсказать мне в общих чертах, что нужно сделать и на какой стороне (мобильной или серверной).

Ответ №1:

для мобильного приложения вам нужно будет использовать мобильный SDK для получения токена доступа, а в серверной части вам нужно будет использовать токен доступа для получения информации о пользователе следующим образом

 $provider_user = Socialite::driver($provider)->userFromToken($request->access_token);