Как войти в систему с помощью Google в Socialite в Laravel 5.8 с различными типами пользователей - PullRequest
0 голосов
/ 02 мая 2019

Я хочу войти в систему через Google Socialite для двух типов пользователей.

1- Пользователи компании.

2- Физические лица

В таблице пользователей базы данных я добавляю поле sign_up_as, если 1, то пользователей компании, если 2, то физических лиц. Итак, как мне ввести значение 1 и 2 для входа с помощью ссылки Google.

В окне входа в систему я добавляю этот код

<li>
    <a href="{{ url('/redirect') }}"><i class="fa fa-google"></i></a>
</li>

Контроллер

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Socialite;
use App\Services\SocialGoogleAccountService;
use  Illuminate\Routing\UrlGenerator;

class SocialAuthGoogleController extends Controller
{

    public function redirect()
    {
        return Socialite::driver('google')->redirect();
    }

    public function callback(SocialGoogleAccountService $service)
    {

        $user = $service->createOrGetUser(Socialite::driver('google')->user());
        auth()->login($user);
        return redirect()->to('/home');
    }
}

функция createOrGetUser

public function createOrGetUser(ProviderUser $providerUser)
{
    // dd('now here');
    $account = SocialGoogleAccount::whereProvider('google')
        ->whereProviderUserId($providerUser->getId())
        ->first();
    // dd($account);
    if ($account) {
        return $account->user;
    } else {
        $account = new SocialGoogleAccount([
            'provider_user_id' => $providerUser->getId(),
            'provider' => 'google'
        ]);
        $user = User::whereEmail($providerUser->getEmail())->first();
        if (!$user) {

            $user = User::create([
                'email' => $providerUser->getEmail(),
                'name' => $providerUser->getName(),
                'password' => md5(rand(1, 10000)),
                'sign_up_as' => 2, // currently sign_up-as static
            ]);
        }
        $account->user()->associate($user);
        $account->save();
        return $user;
    }
}

1 Ответ

0 голосов
/ 04 мая 2019

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

@php
  session(['sign_up_as' => '2']);
@endphp

и в контроллере

$sign_up_as = session('sign_up_as');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...