Laravel 5.4: пользовательское промежуточное ПО не работает в маршруте

Я создал следующее промежуточное ПО для проверки сеанса пользователя

<?php

namespace App\Http\Middleware;

use Closure;

class Checkusersession
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!$request->session()->has('admin_name')) {
            // user value cannot be found in session
            return redirect('adminlogin');
        }

        return $next($request);
    }
}

это мой маршрут:

 Route::get('webadmin',['middleware' => 'usersession','Admin_controller@index']);

это мой kernel.php

 protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'usersession' => \App\Http\Middleware\Checkusersession::class,
];

это мой метод контроллера, который создает сеанс:

public function auth_admin(Request $request)
{
    $admin_emai = $request->input('admin_email');
    $admin_password = $request->input('admin_password');

    $checklogin = DB::table('admin_login')
        ->select('admin_id','admin_email','admin_name')
        ->where([
            'admin_email' => $admin_email,
            'admin_password' => $admin_password
        ])->first();

    if (count($checklogin) > 0) {
        $request->session()->put('admin_id',$checklogin->admin_id);
        $request->session()->put('admin_name',$checklogin->admin_name);
        $request->session()->put('admin_email',$checklogin->admin_email);

        return redirect()->action('Admin_controller@webadmin');
    } else {
        return redirect()->action('Admin_controller@admin_login_page')->with('status','Incorrect Email ID or Password');
    }
}

Я хочу, чтобы промежуточное ПО проверяло, существует ли сеанс (admin_name) или нет. Если нет, перенаправьте пользователя на страницу входа. Но это не работает. если я получаю доступ к веб-администратору (панели управления) непосредственно с URL-адреса, он дает мне доступ, даже если сеанс не установлен. Пожалуйста помоги.


person Sameer Ali    schedule 07.06.2017    source источник
comment
попробуйте сделать dd ($ request- ›session ()) перед перенаправлением в вашем контроллере, чтобы убедиться, что сеанс, который я успешно создал, также проверьте файл config / session.php, чтобы убедиться, что ваша конфигурация верна. Я бы рекомендовал использовать класс Auth laravel.   -  person Alan Torres    schedule 07.06.2017
comment
Такая же проблема здесь: /   -  person juniorgarcia    schedule 22.06.2017


Ответы (1)


Ваш маршрут неверен, вы должны записать его как (в L5.4):

Route::get('webadmin', 'Admin_controller@index')->middleware('usersession');

Или даже:

Route::group(['middleware' => 'auth'], function(){
    Route::get('webadmin', 'Admin_controller@index');
});

В L5.3 (как вы отметили вопрос) и в L5.4, я думаю, вы также могли бы написать:

Route::get('webadmin',['middleware' => 'usersession', 'uses => 'Admin_controller@index']);

Кроме того, пробовали ли вы просто сделать dd(request()); или подобное в своей функции дескриптора промежуточного программного обеспечения, чтобы убедиться, что она действительно запущена?

person Marcus Olsson    schedule 08.06.2017
comment
Здесь та же проблема. Маршрут не достигает моего пользовательского промежуточного программного обеспечения. - person juniorgarcia; 22.06.2017