Laravel 生成无效路由
Laravel generating invalid routes
我不知道 laravel 发生了什么,laravel 在我执行某些操作时生成无效路由,例如当我打开评论框以单击按钮评论模式框打开罚款但是当我在 chrome 开发人员选项 -> 网络中查看,它向我显示了许多无效路由。知道为什么会这样吗?
请看附件截图:
Admin 是我的路由前缀
Route::group(['prefix' => 'admin', 'before' => 'allow_only_admin'], function () {
});
http://projecturl.com/admin/order/
Route::filter('allow_only_admin', function () {
if (Auth::check() && !Auth::user()->is('admin')) {
return redirect()->intended('user/login');
} else {
}
});
这是我的ABC中间件:
class Abc {
public function handle($request, Closure $next) {
if (\Auth::check() && \Auth::user()->admin) {
return $next($request);
}
return redirect()->route('user.login');
}
}
这是我的 No_auth 过滤器:它检查用户登录并重定向到它的用户角色
Route::filter('no_auth', function () {
if (Auth::check()) {
if (Auth::user()->is('admin')) {
return Redirect::route('orders.all');
}
if (Auth::user()->is('writer')) {
return Redirect::route('windex');
}
if (Auth::user()->is('teamlead')) {
return Redirect::route('tlindex');
}
}
});
这是登录路径:
Route::group(['prefix' => 'user', 'before' => 'no_auth'], function () {
Route::get('login', ['as' => 'user.login', 'uses' => 'Auth\AuthController@showLoginForm']);
});
Route::post('user/login', ['as' => 'user.post.login', 'uses' => 'Auth\AuthController@postLogin']);
Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\AuthController@getLogout']);
您的中间件可能会无限期地循环这些重定向。我尝试重新重定向一次,结果发生了。我建议重新组织您的管理中间件,这是我使用的:
App\Http\Middleware\Admin.php:
<?php namespace App\Http\Middleware;
use Closure;
class Admin {
public function handle($request, Closure $next)
{
if (\Auth::check() && \Auth::user()->admin) {
return $next($request);
}
return redirect()->route('some.route');
}
}
App/Http/Kernel.php
protected $routeMiddleware = [
...
'admin' => 'App\Http\Middleware\Admin',
];
将其设置为中间件:在 Kernel.php
中添加 'admin' => 'App\Http\Middleware\Admin',
然后在 routes.php
中:
Route::group(['middleware' => 'admin'], 函数() {
...管理路线...
编辑:
添加更多代码后,这里有一些提示,也许它们会帮助您解决问题。
您不需要路由过滤器,将它们全部删除。使用路由组,所以管理路由在这个声明中:
routes.php
Route::group(['middleware' => 'admin', 'prefix' => 'admin'], function() {
... admin routes
}
不要忘记在 Kernel.php 中使用正确的名称注册管理中间件(在我的示例中为 admin
)。
要将用户重定向到他们自己的区域,请尝试将逻辑放在 Auth\AuthController@postLogin
的 post 登录路由中。在那里您将检查凭据是否正确(Auth::attempt),如果正确,则 if else
将用户重定向到正确的位置。
您不需要 no_auth
过滤器,只需将其删除即可。
我不知道 laravel 发生了什么,laravel 在我执行某些操作时生成无效路由,例如当我打开评论框以单击按钮评论模式框打开罚款但是当我在 chrome 开发人员选项 -> 网络中查看,它向我显示了许多无效路由。知道为什么会这样吗?
请看附件截图:
Admin 是我的路由前缀
Route::group(['prefix' => 'admin', 'before' => 'allow_only_admin'], function () {
});
http://projecturl.com/admin/order/
Route::filter('allow_only_admin', function () {
if (Auth::check() && !Auth::user()->is('admin')) {
return redirect()->intended('user/login');
} else {
}
});
这是我的ABC中间件:
class Abc {
public function handle($request, Closure $next) {
if (\Auth::check() && \Auth::user()->admin) {
return $next($request);
}
return redirect()->route('user.login');
}
}
这是我的 No_auth 过滤器:它检查用户登录并重定向到它的用户角色
Route::filter('no_auth', function () {
if (Auth::check()) {
if (Auth::user()->is('admin')) {
return Redirect::route('orders.all');
}
if (Auth::user()->is('writer')) {
return Redirect::route('windex');
}
if (Auth::user()->is('teamlead')) {
return Redirect::route('tlindex');
}
}
});
这是登录路径:
Route::group(['prefix' => 'user', 'before' => 'no_auth'], function () {
Route::get('login', ['as' => 'user.login', 'uses' => 'Auth\AuthController@showLoginForm']);
});
Route::post('user/login', ['as' => 'user.post.login', 'uses' => 'Auth\AuthController@postLogin']);
Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\AuthController@getLogout']);
您的中间件可能会无限期地循环这些重定向。我尝试重新重定向一次,结果发生了。我建议重新组织您的管理中间件,这是我使用的:
App\Http\Middleware\Admin.php:
<?php namespace App\Http\Middleware;
use Closure;
class Admin {
public function handle($request, Closure $next)
{
if (\Auth::check() && \Auth::user()->admin) {
return $next($request);
}
return redirect()->route('some.route');
}
}
App/Http/Kernel.php
protected $routeMiddleware = [
...
'admin' => 'App\Http\Middleware\Admin',
];
将其设置为中间件:在 Kernel.php
中添加 'admin' => 'App\Http\Middleware\Admin',
然后在 routes.php
中:
Route::group(['middleware' => 'admin'], 函数() {
...管理路线...
编辑: 添加更多代码后,这里有一些提示,也许它们会帮助您解决问题。
您不需要路由过滤器,将它们全部删除。使用路由组,所以管理路由在这个声明中:
routes.php
Route::group(['middleware' => 'admin', 'prefix' => 'admin'], function() {
... admin routes
}
不要忘记在 Kernel.php 中使用正确的名称注册管理中间件(在我的示例中为 admin
)。
要将用户重定向到他们自己的区域,请尝试将逻辑放在 Auth\AuthController@postLogin
的 post 登录路由中。在那里您将检查凭据是否正确(Auth::attempt),如果正确,则 if else
将用户重定向到正确的位置。
您不需要 no_auth
过滤器,只需将其删除即可。