【问题标题】:Laravel 5 Socialite Duplicate entryLaravel 5 Socialite 重复条目
【发布时间】:2015-03-09 15:00:00
【问题描述】:

我将社交名流与手动注册一起实现,其中使用 facebook 注册是用户的选项。但我注意到,如果用户先通过手动注册和注销进行注册,然后返回并使用 facebook 进行注册,则会产生错误

SQLSTATE[23000]:违反完整性约束:1062 Duplicate entry"

这是我当前的 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
       ]);
    }
}

【问题讨论】:

    标签: php sql facebook laravel eloquent


    【解决方案1】:

    我最近遇到了这个问题。我正在测试一个预先注册的用户使用 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;
    }
    

    然后你的原始函数在这里。

    【讨论】:

      【解决方案2】:

      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...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        • 2016-02-06
        • 2016-07-11
        • 2015-05-21
        • 2018-02-22
        • 1970-01-01
        • 2020-07-07
        相关资源
        最近更新 更多