#php #laravel #debugging #google-login #laravel-socialite
#php #laravel #отладка #google-вход #laravel-socialite
Вопрос:
(Laravel 5.8 с Socialite для входа в Google) после успешной регистрации или входа в систему веб-сайт не перейдет в состояние входа в систему, как проверить, что не так?
Итак, настройка завершена, это мой контроллер входа в систему, ожидал новых данных для таблицы пользователей, но данных нет, всплывающее окно для выбора учетной записи gmail для входа в систему отображается правильно, как проверить, что не так? как на самом деле войти в систему после выбора учетной записи gmail при появлении всплывающего окна?
<?php
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateFoundationAuthAuthenticatesUsers;
use Socialite;
use AppUser;
use Auth;
use IlluminateHttpRequest;
use Hash;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
public function redirectToProvider()
{
return Socialite::driver('google')->redirect();
}
public function handleProviderCallback()
{
try
{
$user = Socialite::driver('google')->user();
}
catch (Exception $e)
{
return redirect('login');
}
$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('/');
}
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function login(Request $request)
{
$input = $request->all();
$this->validate($request, [
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', '=', $input['email'])->first();
if(auth()->attempt(array('email' => $input['email'], 'password' => Hash::check($input['password'],$user->password))))
{
// dd('here 1');
if (auth()->user()->is_partner == 1) {
return redirect()->route('partner.home');
}else{
return redirect()->route('home');
}
}
else
{
// dd($input['password']);
return redirect()->route('login')->with('error','Email-Address And Password Are Wrong.');
}
}
}
Ответ №1:
Смотрите мой :
public function providerCallback($provider)
{
$sUser = Socialite::driver($provider)->user();
if($user=User::where('email',$sUser->getEmail())->orderBy('id','desc')->first())
{
// There is a user with this email and provider ID on your system. deal with it here!
}else{
// Add user to DB
$user=User::create([
'first_name'=>'',
'last_name'=>'',
''=>'',
''=>'',
''=>'',
]);
// IF you want to give users any role?
$role=Role::where('name','someRole')->first();
$user->assignRole($role['name']);
// You should save provided user detail on your DB I think!
$providerModel=Provider::create([
'provider_name'=>'',
'provider_id'=>'Provider user id',
'user_id'=>$user->id,
'avatar'=>'provider user Avatar',
]);
// Do your Welcome to user like send him a message or what?
}
// Save your user login details?
Login::create([
'ip'=>request()->ip(),
'user_id'=>$user->id,
'success'=>1,
''=>'',
''=>'',
''=>'',
''=>'',
]);
// Login user
Auth::login($user,true);
return redirect('where to redirect');
}
Комментарии:
1. он даже не переходит к функции handleProviderCallback, интересно, почему,,
2. я думаю, вам следует заменить $provider на «google». @user12297722
Ответ №2:
решается параметром env .. url обратного вызова
GOOGLE_REDIRECT=https://yourdomain.com/login/google/callback