2016-02-24 84 views
0

这不是关于我现在有问题的帖子。我正计划在我的应用程序中使用Laravel Socialite插件,我已经有一个使用Laravel内建的Auth系统的完全正常工作的登录/注册系统,但我想知道是否有一种好方法可以允许已在我的帐户中拥有帐户的用户应用程序将他们的社交个人资料链接到已有的帐户?Laravel 5.1和Socialite问题

该计划是他们可以用他们的用户名和密码登录他们的任何社交档案。到目前为止,我所做的所有研究都解释了如何设置Socialite并将这些数据用于注册/登录新用户,但我无法找到任何可以将两者结合在一起的任何内容。

我不是在找任何人为我写这篇文章,所以请不要被这篇文章弄糊涂了。

感谢任何信息, 安迪

回答

2

绝对。

我在一个网站上有FB和Twitter OAuth。我这样做的方法是将oauth_facebook_idoauth_twitter_id列添加到users表(以及avatar列,如果需要的话)。

我必须设置为/auth/{provider}/auth/{provider}/callback,所以/auth/facebook/auth/facebook/callback例如路线。

在我的的handleProviderCallback($provider)方法中,我抓取返回的用户的详细信息,并检查它们是否已经存在于我的数据库中,包括他们的电子邮件,Facebook OAuth ID或Twitter OAuth ID。如果它们存在,我设置他们的电子邮件,OAuth ID和他们的头像,如果它们不存在,我创建它们。然后我登录他们。

$user = Socialite::driver($provider)->user(); 

    $user_query = User::where('email', $user->email) 
     ->orWhere('oauth_facebook_id', $user->id) 
     ->orWhere('oauth_twitter_id', $user->id) 
     ->get(); 

    if($user_query->count() > 0) { 

     $the_user = $user_query->first(); 

     if($provider === 'facebook') { 
      $the_user->oauth_facebook_id = $user->id; 
     } 

     if($provider === 'twitter') { 
      $the_user->oauth_twitter_id = $user->id; 
     } 

     $the_user->avatar = $user->avatar; 

     $the_user->save(); 

     \Auth::login($the_user, true); 

     return redirect('/'); 
    } 

    $new_user = User::create([ 
     'name' => $user->name, 
     'email' => $user->email, 
     'oauth_facebook_id' => $provider === 'facebook' ? $user->id : NULL, 
     'oauth_twitter_id' => $provider === 'twitter' ? $user->id : NULL, 
     'avatar' => $user->avatar 
    ]); 

    \Auth::login($new_user, true); 

    return redirect('/'); 

希望这可以帮助您了解如何做到这一点。

+0

这是一个很棒的信息,非常感谢。唯一的问题*如果你想要这样做,那就是有人可能会为他们的社交方面使用不同的电子邮件,而不是我的应用(我在几个网站上)。您是否认为有一种方法可以使用此代码在使用用户名和密码登录后启用关联帐户? –