Как разрешить вход в систему после перенаправления Facebook в Laravel - PullRequest
0 голосов
/ 20 апреля 2020

Моя Laravel Версия 6. 6. 1001 *

Мой сайт предлагает пользователям функцию входа в Facebook. Когда пользователь нажимает кнопку «Войти через Facebook» , я получил его адрес электронной почты, имя в своей базе данных, и пользователь, как и ожидалось, перенаправляется на домашнюю страницу моего веб-сайта, но проблема заключается в том, что пользователь не вошел в систему. Я использовал Auth :: login ($ user) в моей функции перенаправления, но проблема все еще существует.

Пожалуйста, помогите мне решить эту проблему.

SocialAuthFacebookController. php

class SocialAuthFacebookController extends Controller
 {
 public function redirect($provider)
 {
     return Socialite::driver($provider)->redirect();
 }
 public function callback($provider, Request $request)
 {

   $state = $request->get('state');
   $request->session()->put('state',$state);
   $getInfo = Socialite::with($provider)->user();
   $user = $this->createUser($getInfo,$provider);
   Auth::login($user);
   return redirect()->to('/home#');
 }

 function createUser($getInfo,$provider){
 $user = User::where('provider_user_id', $getInfo->id)->first();
 if (!$user) {
      $user = User::create([
         'name'     => $getInfo->name,
         'email'    => $getInfo->email,
         'provider' => $provider,
         'provider_user_id' => $getInfo->id
     ]);
   }
   return $user;

 }

 }

Услуги / SocialFacebookAccountService. php

class SocialFacebookAccountService
{

    public function createOrGetUser(ProviderUser $providerUser)
    {
        $account = SocialFacebookAccount::whereProvider('facebook')
            ->whereProviderUserId($providerUser->getId())
            ->first();
        if ($account) {
            return $account->user;
        } else {
            $account = new SocialFacebookAccount([
                'provider_user_id' => $providerUser->getId(),
                'provider' => 'facebook'
            ]);
            $user = User::whereEmail($providerUser->getEmail())->first();
            if (!$user) {
                $user = User::create([
                    'email' => $providerUser->getEmail(),
                    'name' => $providerUser->getName(),
                    'password' => md5(rand(1,10000)),
                ]);
            }
            $account->user()->associate($user);
            $account->save();
            return $user;
        }
    }
}
...