簡體   English   中英

Laravel 5.1和Socialite - 如何將Facebook / Twitter詳細信息連接到當前經過身份驗證的用戶

[英]Laravel 5.1 & Socialite - How to connect Facebook/Twitter details to currently authenticated user

我已經很好地實施了社交網站,適用於與我的應用數據庫中的電子郵件地址具有相同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();
}

以下是我當前處理社交網絡用戶創建/更新的代碼:

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');
    }

將返回的詳細信息與當前經過身份驗證的用戶鏈接的最佳方法是什么?

提前致謝 :)

只需檢查用戶是否已登錄,然后使用oauth_{provider}_id返回的數據( $userData->id )更新該用戶的oauth_{provider}_id

否則,使用返回的數據創建新用戶。

像這樣的東西:

public function handleProviderCallback($provider)
{
    $userData = Socialite::driver($provider)->user();

    if(Auth::check()) {

        $user = User::find(Auth::user()->id);

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

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

        $user->save();

    } else {

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

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

        flash()->success('Success!', 'Your account has been created using your '.ucfirst($provider).' details!');

    }

    return redirect('/dashboard');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM