2015-03-09 3 views
0

Я реализую socialite вместе с ручной регистрацией, где регистрация с использованием facebook является опцией пользователя. но я заметил, что если пользователь зарегистрирован первый с ручной регистрации и выхода из системы затем вернулся и зарегистрировать с помощью Facebook, что приводит к ошибкеLaravel 5 Socialite Duplicate entry

SQLSTATE [23000]: Integrity нарушение ограничения: 1062 Дублированный запись»

вот мой текущий UserRepository

namespace App\Repositories; 
use App\User; 
class UserRepository{ 
    public function findByUsernameOrCreate($userData) 
    { 
     return User::firstOrCreate([ 
     'first_name' => $userData->first_name, 
     'last_name' => $userData->last_name, 
     'email' => $userData->email 
     ]); 
    } 
} 

ответ

3

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

Предполагая, что вы можете проверить наличие (не facebook) пользователя по их адресу электронной почты.

$user = User::where('email', $userData->email)->first(); 

if ($user){ 

    // Update existing user with facebook data. 
    $user->email = $userData->email; 
    // Any other fields you want to update. 
    $user->avatar = $userData->avatar; 

    $user->save(); 

    return $user; 
} 

Тогда ваша оригинальная функция здесь.

0

Mark имеет право, однако данные будут обновляться каждый раз, когда пользователь подключается к Facebook. Вот некоторые улучшения:

$authUser = User::where('email', $existingUser->email)->first(); 

    if ($authUser){ 

     // Check and update if Facebook data doesn't exists 
     if(!($authUser->facebook_id)){ 
      $authUser->facebook_id = $existingUser->id; 
      $authUser->avatar = $existingUser->avatar; 
      $authUser->save(); 
     } 

     return $authUser; 
    } 

    // following by your function here...