Laravel社交名流注册如何为用户创建唯一的用户名

时间:2018-08-02 20:34:47

标签: php laravel facebook laravel-socialite

我该如何使用facebook register socialite laravel创建唯一的用户名,我在下面有控制器代码,但我不知道怎么回事,我是laravel的新手。预先感谢。

  public function redirectToFacebook()
    {
       return Socialite::driver('facebook')->fields([
             'name', 'email', 
        ])->scopes([
            'email'
        ])->redirect();
    } 

    public function handleFacebookCallback()
    {
        try {

            $user = Socialite::driver('facebook')->user();
            $create['name'] = $user->getName();
            $create['email'] = $user->getEmail();
            $create['facebook_id'] = $user->getId();

            $userModel = new User;
            $createdUser = $userModel->addNew($create);
            Auth::loginUsingId($createdUser->id);

            return redirect()->route('/');

        } catch (Exception $e) {

            return redirect('/');
        }
    }

1 个答案:

答案 0 :(得分:0)

包含用户登录时的时间戳,例如:

$time = Carbon::now()->timestamp;
$create['name'] = $user->getName().$time;

此外,每次用户登录时,它都会尝试创建一个用户,因此请确保首先检查该用户是否存在:

public function handleFacebookCallback()
{
    try {

        $user = Socialite::driver('facebook')->user();
        $create['name'] = $user->getName();
        $create['email'] = $user->getEmail();
        $create['facebook_id'] = $user->getId();

        $user = User::firstOrCreate($create);
        Auth::loginUsingId($user->id);

        return redirect()->route('/');

    } catch (Exception $e) {

        return redirect('/');
    }
}

使用firstOrCreate()函数检查它是否存在,然后创建它。