在验证用户身份(升级后)后,Laravel 5为什么会继续重定向到/ login

时间:2019-04-03 02:43:07

标签: authentication laravel-5 upgrade

我使用LaraShift将我的Laravel 4.2应用程序升级到5.0。 LaraShift将我带到了大约一半的位置,我花了10个小时来获取剩余50%的90%以上。我完全卡住的地方是登录名。 Laravel正在对用户进行身份验证,但随后立即重定向回登录页面。这是我的sessionController的顶部:

<?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();
    }

除了顶部的名称空间和use语句外,这与我在4.2中编写的代码相同。该应用程序将转到此行:

return Redirect::intended('/');

在底部,然后重定向到/ login

密码重置功能正常工作。输入正确的用户名和密码时,用户正在验证。我有一个包含ID,电子邮件,密码的标准用户模型。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

因此,我不知道应用程序流是如何从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('/');
}