Php Laravel 5.1管理路由的身份验证

Php Laravel 5.1管理路由的身份验证,php,laravel,authentication,Php,Laravel,Authentication,我是Laravel的新手,希望建立一个小的管理区域来创建和编辑数据。我使用的是Laravel 5.1提供的身份验证,并遵循了此文档 我在所有后端路由前加上“admin”。 现在,如果我登录,我将被重定向到正确的页面。但一旦我点击一个链接或重新加载页面,我就会被重定向到我的登录页面 我想我只是在路线上出了点问题 其他信息: Laravel框架版本5.1.17(LTS) 我正在使用vagrant作为我的开发环境。这是一个定制的盒子。但我 已经尝试使用这个文件库的宅地,同样的问题 如果没有auth中

我是Laravel的新手,希望建立一个小的管理区域来创建和编辑数据。我使用的是Laravel 5.1提供的身份验证,并遵循了此文档

我在所有后端路由前加上“admin”。 现在,如果我登录,我将被重定向到正确的页面。但一旦我点击一个链接或重新加载页面,我就会被重定向到我的登录页面

我想我只是在路线上出了点问题

其他信息:

  • Laravel框架版本5.1.17(LTS)
  • 我正在使用vagrant作为我的开发环境。这是一个定制的盒子。但我 已经尝试使用这个文件库的宅地,同样的问题
  • 如果没有auth中间件,我的所有路由都是可访问的,并且 工作正常
routes.php

// Frontend
Route::get('/', ['as' => 'home', 'uses' => 'ContentController@index']);
Route::resource('comment', 'CommentController', ['only' => ['create','store']]);

// Authentication
Route::get('admin/login', array('as' => 'admin.login', 'uses' => 'Auth\AuthController@getLogin'));
Route::post('admin/login', array('as' => 'admin.login', 'uses' => 'Auth\AuthController@postLogin'));
Route::get('admin/logout', array('as' => 'admin.logout', 'uses' => 'Auth\AuthController@getLogout'));

// Backend Admin with Authentication
Route::group(array('prefix' => 'admin', 'middleware' => 'auth', 'namespace' => 'Admin'), function()
{
    Route::post('content/sortlist', ['as' => 'admin.content.sortlist', 'uses' => 'ContentController@sortList']);
    Route::resource('content', 'ContentController', ['except' => ['show']]);
    Route::resource('comment', 'CommentController', ['only' => ['index','destroy']]);
});
php artisan路由的输出:列表

+--------+----------+------------------------------+------------------------+-------------------------------------------------------+------------+
| Domain | Method   | URI                          | Name                   | Action                                                | Middleware |
+--------+----------+------------------------------+------------------------+-------------------------------------------------------+------------+
|        | GET|HEAD | /                            | home                   | App\Http\Controllers\ContentController@index          |            |
|        | GET|HEAD | admin/comment                | admin.comment.index    | App\Http\Controllers\Admin\CommentController@index    | auth       |
|        | DELETE   | admin/comment/{comment}      | admin.comment.destroy  | App\Http\Controllers\Admin\CommentController@destroy  | auth       |
|        | POST     | admin/content                | admin.content.store    | App\Http\Controllers\Admin\ContentController@store    | auth       |
|        | GET|HEAD | admin/content                | admin.content.index    | App\Http\Controllers\Admin\ContentController@index    | auth       |
|        | GET|HEAD | admin/content/create         | admin.content.create   | App\Http\Controllers\Admin\ContentController@create   | auth       |
|        | POST     | admin/content/sortlist       | admin.content.sortlist | App\Http\Controllers\Admin\ContentController@sortList | auth       |
|        | PATCH    | admin/content/{content}      |                        | App\Http\Controllers\Admin\ContentController@update   | auth       |
|        | DELETE   | admin/content/{content}      | admin.content.destroy  | App\Http\Controllers\Admin\ContentController@destroy  | auth       |
|        | PUT      | admin/content/{content}      | admin.content.update   | App\Http\Controllers\Admin\ContentController@update   | auth       |
|        | GET|HEAD | admin/content/{content}/edit | admin.content.edit     | App\Http\Controllers\Admin\ContentController@edit     | auth       |
|        | GET|HEAD | admin/login                  | admin.login            | App\Http\Controllers\Auth\AuthController@getLogin     | guest      |
|        | POST     | admin/login                  | admin.login            | App\Http\Controllers\Auth\AuthController@postLogin    | guest      |
|        | GET|HEAD | admin/logout                 | admin.logout           | App\Http\Controllers\Auth\AuthController@getLogout    |            |
|        | POST     | comment                      | comment.store          | App\Http\Controllers\CommentController@store          |            |
|        | GET|HEAD | comment/create               | comment.create         | App\Http\Controllers\CommentController@create         |            |
+--------+----------+------------------------------+------------------------+-------------------------------------------------------+------------+
app/Http/Controllers/Auth/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;

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 $redirectPath = 'admin/content';

    protected $loginPath = 'admin/login';

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

    /**
     * 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, [
            'firstname' => 'required|max:255',
            'lastname' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }

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

找到了解决方案。我在stackoverflow上偶然发现了另一个关于auth的问题,并发现了这个问题

我曾经

<li><a href="{{ Auth::logout() }}">Logout</a></li>
  • 在我的刀片模板中注销。只要存在这种情况,就会出现上述行为。我将其替换为以下内容

    <li><a href="{{ URL::to('admin/logout') }}">Logout</a></li>
    
  • 现在一切都按预期进行!我还是想知道为什么会这样。。。
    但也许这会帮助其他人

    找到了解决办法。我在stackoverflow上偶然发现了另一个关于auth的问题,并发现了这个问题

    我曾经

    <li><a href="{{ Auth::logout() }}">Logout</a></li>
    
  • 在我的刀片模板中注销。只要存在这种情况,就会出现上述行为。我将其替换为以下内容

    <li><a href="{{ URL::to('admin/logout') }}">Logout</a></li>
    
  • 现在一切都按预期进行!我还是想知道为什么会这样。。。
    但也许这会帮助其他人

    听起来好像会话cookie没有在浏览器中创建,请在登录后跟踪页面标题(如果没有问题),检查cookie是否已创建感谢您的反馈!我与Chrome的元素检查器unter Resources->Cookies进行了检查。XSRF-TOKEN和laravel_会话cookie都存在。不过,会话存储是空的。这可能是问题所在吗?不,如果您有laravel会话cookie,则可以,确保它与数据库中的内容相匹配。您可能希望
    dd
    将其放在
    auth
    中,以了解可能出现的错误。您还可以发布您的登录控制器吗?(
    postLogin
    )postLogin()是vendor/laravel/framework/src/illighte/Foundation/auth/AuthenticatesUsers.php下laravel auth的默认方法。我更新了我的问题。我会把垃圾倒出来再打给你。再次感谢。听起来好像会话cookie没有在浏览器中创建,请在登录后跟踪页面标题(如果这些标题没有问题),检查cookie是否已创建感谢您的反馈!我与Chrome的元素检查器unter Resources->Cookies进行了检查。XSRF-TOKEN和laravel_会话cookie都存在。不过,会话存储是空的。这可能是问题所在吗?不,如果您有laravel会话cookie,则可以,确保它与数据库中的内容相匹配。您可能希望
    dd
    将其放在
    auth
    中,以了解可能出现的错误。您还可以发布您的登录控制器吗?(
    postLogin
    )postLogin()是vendor/laravel/framework/src/illighte/Foundation/auth/AuthenticatesUsers.php下laravel auth的默认方法。我更新了我的问题。我会把垃圾倒出来再打给你。再次感谢。之所以会出现这种情况,是因为
    Auth::logout()
    会按照它所说的做:它会将您注销,而不是提供指向注销页面的链接。因此,在您登录后,您会被重定向到主页并直接再次注销,因为此调用发生在您的刀片模板中。单击另一个链接后,您将不再登录,因此将重定向到登录页面。感谢您的澄清,Tim!不会再以这种方式使用它。发生这种情况的原因是
    Auth::logout()
    执行它所说的操作:它将您注销,而不是提供指向注销页面的链接。因此,在您登录后,您会被重定向到主页并直接再次注销,因为此调用发生在您的刀片模板中。单击另一个链接后,您将不再登录,因此将重定向到登录页面。感谢您的澄清,Tim!不会再这样用了。
    <li><a href="{{ Auth::logout() }}">Logout</a></li>
    
    <li><a href="{{ URL::to('admin/logout') }}">Logout</a></li>