Laravel - 登录后重定向回登录页面

Posted

技术标签:

【中文标题】Laravel - 登录后重定向回登录页面【英文标题】:Laravel - Redirect back to login page after login 【发布时间】:2016-09-09 13:28:01 【问题描述】:

登录后,laravel 不断重定向到登录页面。没有错误,什么都没有,它只是再次进入登录页面。也没有错误日志。

这是登录视图的主体:

<body>
        <div class="wrapper-page" >
            <div class="panel panel-color panel-primary panel-pages">
                <div class="panel-heading bg-img"> 
                    <div class="bg-overlay"></div>
                    <h3 class="text-center m-t-10 text-white"> Sign In to <strong>My App</strong> </h3>
                </div> 


                <div class="panel-body">
                 <form class="form-horizontal m-t-20" role="form" method="POST" action=" url('/auth/login') ">
                 !!csrf_field()!!

                  <div class="form-group $errors->has('email') ? ' has-error' : '' ">
                    <div class="col-xs-12">
                        <input class="form-control input-lg" name="email" type="text" required="required" value=" old('email') " placeholder="E-mail Address">
                        @if ($errors->has('email'))
                            <span class="help-block">
                                <strong> $errors->first('email') </strong>
                            </span>
                        @endif
                    </div>
                </div>

                <div class="form-group $errors->has('password') ? ' has-error' : '' ">
                    <div class="col-xs-12">
                        <input class="form-control input-lg" name="password" type="password" required="required" placeholder="Password">
                        @if ($errors->has('password'))
                            <span class="help-block">
                                <strong> $errors->first('password') </strong>
                            </span>
                        @endif
                    </div>
                </div>

                <div class="form-group">
                    <div class="col-xs-12">
                        <div class="checkbox checkbox-primary">
                            <input id="checkbox-login" type="checkbox" name="remember">
                            <label for="checkbox-login">
                                Remember me
                            </label>
                        </div>

                    </div>
                </div>

                <div class="form-group text-center m-t-40">
                    <div class="col-xs-12">
                        <button class="btn btn-primary btn-lg w-lg waves-effect waves-light" type="submit">Log In</button>
                    </div>
                </div>
            </form>
        </div>                                 

    </div>
</div>

这些是授权路线:

Route::group(['middleware' => ['web']], function () 

    Route::group(['prefix' => 'auth'], function () 

        Route::get('login', 'Auth\AuthController@getLogin');
        Route::post('login', 'Auth\AuthController@postLogin');
        Route::get('logout', 'Auth\AuthController@getLogout');

    );    
);

这是 AuthController.php

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use App\Http\Controllers\Auth\Session;

class AuthController extends Controller

    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $redirectAfterLogout = '/auth/login';
    protected $redirectTo = '/clients';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    



    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    

这是配置/session.php:

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default session "driver" that will be used on
    | requests. By default, we will use the lightweight native driver but
    | you may specify any of the other wonderful drivers provided here.
    |
    | Supported: "file", "cookie", "database", "apc",
    |            "memcached", "redis", "array"
    |
    */

    'driver' => 'database',

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to immediately expire on the browser closing, set that option.
    |
    */

    'lifetime' => 120,

    'expire_on_close' => false,

    /*
    |--------------------------------------------------------------------------
    | Session Encryption
    |--------------------------------------------------------------------------
    |
    | This option allows you to easily specify that all of your session data
    | should be encrypted before it is stored. All encryption will be run
    | automatically by Laravel and you can use the Session like normal.
    |
    */

    'encrypt' => false,

    /*
    |--------------------------------------------------------------------------
    | Session File Location
    |--------------------------------------------------------------------------
    |
    | When using the native session driver, we need a location where session
    | files may be stored. A default has been set for you but a different
    | location may be specified. This is only needed for file sessions.
    |
    */

    'files' => storage_path('framework/sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Connection
    |--------------------------------------------------------------------------
    |
    | When using the "database" or "redis" session drivers, you may specify a
    | connection that should be used to manage these sessions. This should
    | correspond to a connection in your database configuration options.
    |
    */

    'connection' => null,

    /*
    |--------------------------------------------------------------------------
    | Session Database Table
    |--------------------------------------------------------------------------
    |
    | When using the "database" session driver, you may specify the table we
    | should use to manage the sessions. Of course, a sensible default is
    | provided for you; however, you are free to change this as needed.
    |
    */

    'table' => 'sessions',

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Name
    |--------------------------------------------------------------------------
    |
    | Here you may change the name of the cookie used to identify a session
    | instance by ID. The name specified here will get used every time a
    | new session cookie is created by the framework for every driver.
    |
    */

    'cookie' => 'myapp_session',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Path
    |--------------------------------------------------------------------------
    |
    | The session cookie path determines the path for which the cookie will
    | be regarded as available. Typically, this will be the root path of
    | your application but you are free to change this when necessary.
    |
    */

    'path' => '/',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Domain
    |--------------------------------------------------------------------------
    |
    | Here you may change the domain of the cookie used to identify a session
    | in your application. This will determine which domains the cookie is
    | available to in your application. A sensible default has been set.
    |
    */

    'domain' => "http://myapp.com",

    /*
    |--------------------------------------------------------------------------
    | HTTPS Only Cookies
    |--------------------------------------------------------------------------
    |
    | By setting this option to true, session cookies will only be sent back
    | to the server if the browser has a HTTPS connection. This will keep
    | the cookie from being sent to you if it can not be done securely.
    |
    */

    'secure' => false,

];

这是 postLogin 方法,我们没有更改:

/**
 * Handle a login request to the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function postLogin(Request $request)

    return $this->login($request);



/**
 * Handle a login request to the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function login(Request $request)

    $this->validateLogin($request);

    // If the class is using the ThrottlesLogins trait, we can automatically throttle
    // the login attempts for this application. We'll key this by the username and
    // the IP address of the client making these requests into this application.
    $throttles = $this->isUsingThrottlesLoginsTrait();

    if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) 
        $this->fireLockoutEvent($request);

        return $this->sendLockoutResponse($request);
    

    $credentials = $this->getCredentials($request);

    if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) 
        return $this->handleUserWasAuthenticated($request, $throttles);
    

    // If the login attempt was unsuccessful we will increment the number of attempts
    // to login and redirect the user back to the login form. Of course, when this
    // user surpasses their maximum number of attempts they will get locked out.
    if ($throttles && ! $lockedOut) 
        $this->incrementLoginAttempts($request);
    

    return $this->sendFailedLoginResponse($request);

我认为会话存在问题,但数据库工作正常,它记录会话,我不知道如何解决这个问题。非常感谢。

【问题讨论】:

尝试更改 session.php 中的域(如果你没有),使用你当前的域 我正在使用我当前的域,但它不起作用。 【参考方案1】:

在您的会话配置中,您使用'driver' =&gt; 'database', 但是'connection' =&gt; null,null 如果您使用数据库驱动程序,则需要指定连接 你可以在config/database.php找到他们 这会导致会话未存储,因此用户在登录后未经过身份验证。

还要确保您已经在数据库中创建了用于存储会话的表

【讨论】:

我将连接更改为'mysql',但没有任何改变。我也尝试了其他驱动程序,但我知道数据库可以工作并且它存储会话,我可以看到它们。

以上是关于Laravel - 登录后重定向回登录页面的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中进行身份验证后重定向

如何将客人重定向到登录页面,在laravel 5.2登录后重定向回来[关闭]

如何在laravel中登录后重定向特定页面

Laravel Ajax登录,成功后重定向到上一个url

Laravel 5.5登录后重定向到特定路由

laravel 5.2 登录后重定向到预期的网址