首页 > 解决方案 > Facebook auth 返回空名称和电子邮件 laravel 8 sociallite

问题描述

我正在尝试添加 Facebook 身份验证,但是当响应返回时,它显示一个空电子邮件和名称。我需要一封电子邮件来注册用户以执行某些活动。

public function socialLoginfb()
{
    // return Socialite::driver('facebook')->redirect();
    return Socialite::driver('facebook')
        ->fields(['first_name', 'last_name', 'email', 'gender', 'birthday'])
        ->scopes(['email', 'user_birthday'])
        ->redirect();
}

public function handleProviderFacebookCallback(Request $request)
{
    if (!$request->has('code') || $request->has('denied')) {
        return redirect()
            ->route('register')
            ->with(['error' => __('You cancelled the social login')]);
    }

    try {
        $user = Socialite::driver('facebook')
            ->fields(['first_name', 'last_name', 'email', 'gender', 'birthday'])
            ->user();

        dd($user);
    } catch (Exception $e) {
        return redirect()
            ->route('register')
            ->with(['error'=> __('Something went wrong')]);
    }
    // return // $user->token;

    if (empty($user->getEmail())) {
        return redirect()
            ->route('register')
            ->with(['error' => __('Please Turn on Email to login')]);
    }

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

    // If user is not registered then he will be registered as customer
    if (!$userFound) {
        DB::beginTransaction();

        $random = rand(10, 99);
        $referral = substr($user->getEmail(), 0, strpos($user->getEmail(), '@')).$random;

        $userFound = new User();
        $userFound->name = $user->getName();
        $userFound->email = $user->getEmail();
        $userFound->email_verified_at = now();
        $userFound->referral = $referral;
        $userFound->loyalty_point = 0;
        $userFound->save();

        $image='';
        // if($user->avatar_original) {
        //     $url=$user->avatar_original;
        //     
        //     // Load the file contents into a variable.
        //     $contents = file_get_contents($url);
        //     $image=Storage::put('profiles', $contents);
        // }

        $profile = Profile::firstOrNew(['user_id' => $userFound->id]);
        $profile->user_id = $userFound->id;
        $profile->fname = $user->getName();

        $profile->save();
        DB::commit();
    }
}

我的控制器中有这段代码来处理请求。请告诉我解决方案。

此外,还有一件事,它在打开 Facebook 访问模式时不显示电子邮件访问权限。

标签: laravelfacebookauthentication

解决方案


推荐阅读