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