Laravel 5.5 - автоматический выход пользователя из системы при перенаправлении (на сервере, но не выполняется локально) - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь создать приложение, которое ничего не делает, кроме входа пользователя через плагин Socialite. Все работает нормально, я перенаправлен на Facebook, создается новый пользователь, а затем, когда пользователь перенаправляется на '/', пользователь таинственным образом выходит из системы.

(Обратите внимание, что это не происходит локально. На моей локальной машине все работает нормально).

Facebook Login Controller:

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');
    }
}

Middleware / 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 то же самое на странице входа, я получаю ложный. Так что каким-то образом пользователь выходит из системы при перенаправлении.

1 Ответ

0 голосов
/ 10 сентября 2018

Это ваша проблема Route::get('/', 'Home@home')->name('home')->middleware('auth');

Вы используете промежуточное ПО аутентификации в вашем \ 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.

...