middleware('guest')->except('logout'); } protected function validateLogin(Request $request) { if($request->exists('google_id_token')) { $request->validate([ 'google_id_token' => 'required|string' ]); } else { $request->validate([ $this->username() => 'required|string', 'password' => 'required|string', ]); } } public function login(Request $request) { // Validate request fields $this->validateLogin($request); // Find existed user by email $requestEmail = $request->get('email'); $existedUser = User::where('email', $requestEmail)->first(); if($existedUser) { // Login procedure if ($this->attemptLogin($request)) { return $this->sendLoginResponse($request); } else { $this->incrementLoginAttempts($request); return $this->sendFailedLoginResponse($request); } } else { // Register procedure $registerController = app(RegisterController::class); return $registerController->register($request); } } public function googleLogin(Request $request) { $this->validateLogin($request); // Initial Google API Client $googleClient = new Google_Client(['client_id' => config('app.googleApi.clientId')]); // Get request API token $googleIdToken = $request->get('google_id_token'); // Verify token $payload = $googleClient->verifyIdToken($googleIdToken); if($payload) { $googleUserEmail = $payload['email']; $existedUser = User::where('email', $googleUserEmail)->first(); if($existedUser) { Auth::login($existedUser); } else { $newUser = User::create([ 'email' => $googleUserEmail, 'password' => Hash::make(substr($googleIdToken, 0, 20)), ]); Auth::login($newUser); } return redirect($this->redirectPath()); } else { abort(403); } } protected function loggedOut(Request $request) { $request->session()->flash('loggedOut', true); return redirect($this->redirectPath()); } }