Laravel Socialite Вход в Google только с одним доменом - PullRequest
0 голосов
/ 11 мая 2018

В моем приложении есть логин Google+ с Laravel Socialite. Когда вход в систему сделан, у меня есть обратный вызов для подключения пользователя (я создаю ее в базе данных при необходимости).

Но я хочу ограничить соединение только с компанией (электронная почта, например, "example@company.com", поэтому только электронная почта с "company.com").

Могу ли я сделать это с Laravel Socialite? Я могу сделать проверку вручную в моем обратном вызове, но если Socialite может сделать это, лучше.

Спасибо

Мой обратный звонок:

public function handleProviderCallback($provider){
  $user = Socialite::driver($provider)->user();

  if ($user) {
    $local_user = User::whereEmail($user->getEmail())->first();
    // If we don't have a user create a new user
    if (!$local_user) {
      $fragment = explode(' ', $user->getName());
      $local_user = User::create([
        'first_name' => isset($fragment[0]) ? $fragment[0] : '',
        'last_name' => isset($fragment[1]) ? $fragment[1] : '',
        'email' => $user->getEmail(),
        'last_seen' => Carbon::now(),
        'password' => ''
      ]);
      $local_user->roles()->attach(Role::whereName('User')->first());
    }
    auth()->login($local_user);
  }
  return redirect($this->redirectTo);
}

1 Ответ

0 голосов
/ 07 марта 2019

У вас есть пошаговое руководство по ограничению домена здесь: [https://medium.com/employbl/add-login-with-google-to-your-laravel-app-d2205f01b895][1]

В контроллере вам необходимо указать следующие действия:

public function handleProviderCallback()
{
    try {
        $user = Socialite::driver('google')->user();
    } catch (\Exception $e) {
        return redirect('/login');
    }
    // only allow people with @company.com to login
    if(explode("@", $user->email)[1] !== 'company.com'){
        return redirect()->to('/');
    }
    // check if they're an existing user
    $existingUser = User::where('email', $user->email)->first();
    if($existingUser){
        // log them in
        auth()->login($existingUser, true);
    } else {
        // create a new user
        $newUser                  = new User;
        $newUser->name            = $user->name;
        $newUser->email           = $user->email;
        $newUser->google_id       = $user->id;
        $newUser->avatar          = $user->avatar;
        $newUser->avatar_original = $user->avatar_original;
        $newUser->save();
        auth()->login($newUser, true);
    }
    return redirect()->to('/home');
}

Сообщите мне, если это поможет вам.

С уважением!

...