简体   繁体   English

Laravel 5.4:自定义中间件无法正常工作

[英]Laravel 5.4: custom Middleware not working in route

I created the following Middleware to check user session 我创建了以下中间件来检查用户会话

<?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);
    }
}

this is my route: 这是我的路线:

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

this is my kernel.php 这是我的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,
];

this is my controller method that creates session: 这是我创建会话的控制器方法:

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');
    }
}

I want the Middleware to check if the session (admin_name) exists or not. 我希望中间件检查会话(admin_name)是否存在。 If not, redirect the user to the login page. 如果不是,则将用户重定向到登录页面。 but it is not working. 但它不起作用。 if I access the webadmin (dashboard) directly from url, it gives me access even if the session is not set. 如果我直接从url访问webadmin(仪表盘),即使没有设置会话,它也使我可以访问。 Please help. 请帮忙。

Your route is wrong, you should write it as (in L5.4): 您的路线错误,应将其写为(在L5.4中):

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

Or even: 甚至:

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

In L5.3 (as you have tagged the question), and in L5.4 I guess you could also write: 在L5.3(如您标记的问题)中,在L5.4中,我想您也可以这样写:

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

Also, have you tried just to do a dd(request()); 另外,您是否尝试过做dd(request()); or similar in your middleware-handle function to see that it is actually fired? 或中间件句柄函数中的类似内容,以查看它是否实际被触发了?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM