Я пытаюсь создать приложение, которое ничего не делает, кроме входа пользователя через плагин Socialite.
Все работает нормально, я перенаправлен на Facebook, создается новый пользователь, а затем, когда пользователь перенаправляется на «/», пользователь таинственным образом выходит из системы.
(Обратите внимание, что это не происходит локально. На моей локальной машине все работает нормально).
Контроллер входа в Facebook:
public function handleFacebookCallback()
{
$socialiteUser = Socialite::driver('facebook')->stateless()->user();
$user = $this->findOrCreateUser('facebook', $socialiteUser);
Auth::login($user, true);
return redirect('/');
}
Файл маршрутов:
Route::get('/', 'Home@home')->name('home')->middleware('auth');
Route::get('/home', 'Home@home')->name('home')->middleware('auth');
Route::get('/login', 'Controller@welcome')->name('welcome');
Auth::routes();
Route::get('/logout', 'Auth\LoginController@logout');
Route::get('facebook', function() {
return view('facebook');
});
Route::get('auth/facebook', 'Auth\FacebookController@redirectToFacebook');
Route::get('auth/facebook/callback', 'Auth\FacebookController@handleFacebookCallback');
Контроллер входа:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
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.
|
*/
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');
}
}
Промежуточный / RedirectIfAuthenticated.php:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}
В моей папке промежуточного программного обеспечения нет определенного промежуточного программного обеспечения «auth». Это делается автоматически через Laravel.
ОПЯТЬ: этот проект работает как задумано ЛОКАЛЬНО, но не на сервере.
последнее замечание: когда я dd (Auth :: check ()) НЕМЕДЛЕННО перед перенаправлением на ‘/’, даже на сервере, я получаю «true», но затем, когда я dd то же самое на странице входа, я получаю false. Таким образом, каким-то образом пользователь выходит из системы на перенаправлении.
Это твоя проблема Route::get('/', 'Home@home')->name('home')->middleware('auth');
Вы используете auth middleware в вашем \ path.
Если вы не знаете, что это промежуточное ПО, я рекомендую вам это https://laravel.com/docs/5.6/authentication#protecting-routes
Ваш маршрут должен быть
Route::get('/', 'Home@home')->name('home');
Но вы должны изменить это тоже, потому что они используют тот же контроллер
Route::get('/home', 'Home@home')->name('home')->middleware('auth');
Другим решением может быть проверка URL на странице разработчика на Facebook.
Других решений пока нет …