我正在将我们的网络应用程序从laravel 4.2升级到laravel 5.2。我设法解决了大部分问题,但这个特殊的问题让我陷入了困境。
管理仪表板的路径组如下所示:
Route::group(['middleware' => 'web','prefix' => 'adm'], function ()
{
Route::get('login', ['as' => 'admin.login.view', 'uses' => 'AdminLoginController@loginView']);
Route::post('login', ['as' => 'admin.login.attempt', 'uses' => 'AdminLoginController@attempt']);
Route::get('logout', ['as' => 'admin.logout', 'uses' => 'AdminLoginController@logout']);
...other routes pertaining to admin dashboard
}
管理面板中的登录功能和所有功能均按预期工作。唯一的问题是当用户注销时,任何人都可以访问管理面板中的其余路径(无需登录)。我已经放置了Auth :: check()并在各种控制器中检查了auth,登录和注销按预期工作。
如果用户未登录,则auth :: check()会失败,如果用户已登录,则会通过。 如何确保该组中的所有路由只能由登录用户访问。我尝试创建另一个名为authAdmin的中间件,并尝试使用它而不是Web中间件。在那种情况下,我甚至无法登录。
答案 0 :(得分:1)
我为登录创建了新的中间件,在页面中看起来像这样
namespace App\Http\Middleware;
use Closure;
class Login
{
public function handle($request, Closure $next)
{
$messages = config('message');
if ($request->session()->has('userId')) {
return $next($request);
}
return redirect('/')->withErrors("Please login first");
}
}
在Kenel.php注册登录类
protected $routeMiddleware = [
'login' => \App\Http\Middleware\Login::class,
...
在路线档案中
Route::group(['middleware' => ['web'],'prefix' => 'adm'], function () {
Route::get('login', ['as' => 'admin.login.view', 'uses' => 'AdminLoginController@loginView']);
Route::post('login', ['as' => 'admin.login.attempt', 'uses' => 'AdminLoginController@attempt']);
Route::get('logout', ['as' => 'admin.logout', 'uses' => 'AdminLoginController@logout']);
Route::group(['middleware' => 'login'], function () {
[Your other route here]
});
)};
希望这个帮助