Почему Laravel 5 продолжает перенаправлять на / логин после аутентификации пользователя (после обновления) - PullRequest
0 голосов
/ 03 апреля 2019

Я использовал LaraShift для обновления моего приложения Laravel 4.2 до 5.0. LaraShift привел меня примерно на полпути, и я потратил 10 часов, получая 90 +% от оставшихся 50%. Я полностью застрял на входе в систему. Laravel аутентифицирует пользователя, но затем сразу же перенаправляет обратно на страницу входа. Это вершина моих сессий Контроллер:

<?php

namespace App\Http\Controllers;

use App\Services\Custom\proxyPermissions;
use App\Http\Requests\Request;
use App\Services\Custom\sendEmail;
use App\Site;
use App\User;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;

class SessionsController extends Controller
{

    public function index()
    {
        if (Auth::check()) {
            return redirect('/');
        }
        return view('sessions.login');
    }

    public function loginPost()
    {
        if ($t = Auth::attempt(Input::only('email', 'password'), Input::only('remember'))) {
            $u = Auth::user();

            if (Auth::user()->role == 'admin') {
                $user = User::whereId(Auth::user()->id)->with('sites')->first();
                if (isset($user->sites[0])) {
                    Site::store2Session($user->sites[0]->id);
                } else {
                    Site::store2Session(1);
                }
            }

            if (Auth::user()->role == 'admin') {
                return Redirect::home();
            } else {
                // User is not an admin
                /*  After user logs in, control comes here, but user is redirected back to the login page
                    instead of to the intended URL or / 
                */
                return Redirect::intended('/');
                //return Redirect::intended();
                //return Redirect::intended('/')->with('flash_notice','Welcome back!');
            }
        }

        return Redirect::back()->with('flash_error', 'Login Failed')->withInput();
    }

За исключением пространства имен и операторов использования вверху, это тот же код, который был у меня в 4.2. Приложение попадает в эту строку:

return Redirect::intended('/');

внизу и затем перенаправить на / login

Функция сброса пароля работает правильно. Пользователь аутентифицируется при вводе правильного имени пользователя и пароля. У меня есть стандартная модель пользователя с идентификатором, электронной почтой, паролем.

Есть идеи?

1 Ответ

0 голосов
/ 04 апреля 2019

Итак, я не знаю, как поток приложений изменился с Laravel 4.2 до 5.0, но я нашел источник ошибки.В 4.2 после того, как пользователь вошел в систему, после того как он был перенаправлен, его разрешения были записаны в сеанс.Этого не происходит (в том же порядке) в Laravel 5.0.

Я нашел этот код, вставленный предыдущим разработчиком:

// @TODO <name redacted>: TEMPORARY FIX, until all session replaced with links to get site data
if (empty($site)) {
    // if no session data, redirect user to login
    \Auth::logout();
    return redirect('/');
}
...