Nano Hash - криптовалюты, майнинг, программирование

Laravel 5.5 - автоматический выход пользователя из системы при перенаправлении (на сервере, но не локально)

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


Ответы:


1

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

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

10.09.2018
  • Таким образом, вы не должны использовать промежуточное программное обеспечение на своем пути «/»? 10.09.2018
  • Внесение этих изменений не решило проблему. Как уже упоминалось, это работает локально, но на сервере я выхожу сразу после перенаправления. 10.09.2018
  • Я намеренно использовал промежуточное ПО для аутентификации в моем пути /, потому что я не хочу, чтобы к чему-либо обращались, если пользователь не вошел в систему. 10.09.2018
  • вы не упомянули об этом в посте. быть ясным. показать контроллер авторизации и промежуточное ПО 10.09.2018
  • так как он работает локально, а не на сервере, может быть какая-то конфигурация на вкладке разработчика в facebook, вы добавили свой новый URL-адрес к принятым? 11.09.2018
  • Да, я сделал, это оказалось проблемой с набором переменных домена сеанса. Мне пришлось удалить его и позволить ему получить нулевое резервное значение по умолчанию, и это решило мою проблему. 11.09.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..