Laravel Socialite передает и получает пользовательские данные?

В настоящее время я добавляю Socialite на свой веб-сайт, чтобы пользователи могли входить в систему с Facebook.

public function redirectToProviderFacebook() {
    return Socialite::driver('facebook')->redirect();
}

public function handleProviderCallbackFacebook() {
    $userSocial = Socialite::driver('facebook')->user();
    $email = $userSocial->getEmail();

    if (User::where('email', $email)->count() > 0) {
        // log them in
        Auth::login(User::where('email', $email)->first());
        return redirect()->route('home')->with('info', "You are now signed in.");
    } else {
        // register an account and log them in
    }
} 

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

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

Есть ли способ предложить пользователю указать предпочтительное имя пользователя? Затем выполните перенаправление следующим образом:

return Socialite::driver('facebook')->with('username', $request->username)->redirect();

Затем получить эти данные, чтобы использовать их для регистрации аутентификации в функции обратного вызова?


person Felix Maxime    schedule 19.11.2017    source источник
comment
Почему вы не устанавливаете имя пользователя после аутентификации с помощью формы?   -  person shukshin.ivan    schedule 23.11.2017


Ответы (2)


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

public function redirectToFacebookProvider()
{
    // save anything you will need later, for example an url to come back to
    Session::put('url.intended', URL::previous());

    return Socialite::driver('facebook')->redirect(); 
}

public function handleFacebookProviderCallback()
{
    // handling....

    $url = Session::get('url.intended', url('/'));
    Session::forget('url.intended');

    return redirect($url);
}

Получил этот ответ от https://laracasts.com/discuss/channels/laravel/socialite-return-parameters-in-callback?page=0

И из Отправка дополнительных параметров в uri обратного вызова в светском человеке пакет для laravel

person Sr.PEDRO    schedule 01.10.2018
comment
Моя цель использования светской львицы совершенно иная, я не использую ее для создания пользователя, но я использую ее в качестве лидера. У меня есть форма лида, когда пользователь нажимает на подписку через linkedin или facebook, затем он берет информацию и сохраняет ее в таблице лидов, из вашего метода я смог получить URL-адрес, но я хочу передать user_id и получить на handleProviderCallback метод. Я не хочу передавать это через URL-адрес, потому что мои URL-адреса поддерживаются. как я могу передать user_id или дополнительные параметры, чтобы получить их с помощью метода handleProviderCallback? - person ; 01.02.2020

Я не уверен насчет facebook, но для github он работает нормально. Попробуй это:

public function socialLogin($loginFrom){
    return Socialite::driver('github') >redirectUrl('http://your-domain.com/callback?data=123')->redirect();
}

в приложении github нужно поставить только: http://your-domain.com/callback

person Rahul Sharma    schedule 09.02.2018