Laravel Socialite传递和检索自定义数据?

时间:2017-11-19 03:46:45

标签: php laravel 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();

然后检索该数据以在回调函数中使用它进行身份验证注册?

2 个答案:

答案 0 :(得分:1)

由于某种原因,“可选参数”对我不起作用,因此我最终使用会话将变量从重定向方法传递给回调方法。这不是最好的方法,但是可以解决问题。

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获得了答案

并且来自Sending additional parameters to callback uri in socialite package for laravel

答案 1 :(得分:0)

我不确定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