私は Socialite をうまく実装しており、新しいユーザーまたはアプリ データベースの電子メール アドレスと同じ Facebook 電子メール アドレスを持つユーザーに対して機能します。
ただし、一部のユーザーは、アプリで使用するアカウントとは異なる Facebook メール アカウントを持っています。ユーザーがログインしているときに、Facebook プロファイルをアプリ アカウントに接続できるようにしたいと考えています。
ここに私のルートがあります:
Route::get('login/{provider}', 'Auth\AuthController@redirectToProvider');
Route::get('login/{provider}/callback', 'Auth\AuthController@handleProviderCallback');
redirectToProvider コード:
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
以下は、socialite ユーザーの作成/更新を処理する現在のコードです。
public function handleProviderCallback($provider)
{
$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('/dashboard');
}
$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,
'confirmed' => true,
'gender' => $user->user['gender'],
]);
\Auth::login($new_user, true);
flash()->success('Success!', 'Your account has been created using your '.ucfirst($provider).' details!');
return redirect('/dashboard');
}
返された詳細を現在の認証済みユーザーに関連付ける最良の方法は何ですか?
前もって感謝します :)