Php 如何检查用户是否登录中间件

Php 如何检查用户是否登录中间件,php,laravel,laravel-middleware,Php,Laravel,Laravel Middleware,我正在使用Laravel中的自定义登录和注销。现在我想通过中间件检查用户是否经过身份验证,然后他们将通过,否则他们将重定向回登录页面。到目前为止,我试过: public function handle($request, Closure $next) { if (! Auth::check()) { return redirect('/'); } return $next($request); } 它不工作,因为当我dd(Auth::check())时

我正在使用Laravel中的自定义登录和注销。现在我想通过中间件检查用户是否经过身份验证,然后他们将通过,否则他们将重定向回登录页面。到目前为止,我试过:

public function handle($request, Closure $next)
{
    if (! Auth::check()) {
        return redirect('/');
    }

    return $next($request);
}
它不工作,因为当我
dd(Auth::check())
时,它会将false作为输出。请帮我解决这个问题。 这是我的登录码

$email=Auth::attempt(['email' => $request->login, 'password' => $request->password]);
        $username=Auth::attempt(['username' => $request->login, 'password' => $request->password]);
        if($username || $email)
        {
            $activity=new Activity;
            $activity->user_id=Auth::id();
            $activity->login_time=date('Y-m-d H:i:s');
            $activity->save();
            return redirect('home');
        }
        else
        {
            return back()->with('msg', 'Error!Enter Cedentials Correctly');
        }

您的中间件需要在web中间件之后运行,因为web中间件负责启动会话


另外,我不完全确定您是否可以在控制器中为中间件组使用中间件方法。你也许可以,但我从来没有试过。如果我是你,我会遵循默认结构,将路由放在web路由组中。

我认为在控制器顶部使用以下功能是最好的方法:

   public function __construct()
    {
      $this->middleware('auth');
    }

如果您在控制器中添加此功能,它将验证用户是否转到您在控制器中定义的路由

如果您使用的是Laravel Auth,那么我认为这应该适合您

if (\Auth::user()->id !== null) {
    return redirect('/');
}

return $next($request);

什么是自定义登录和注销?指的不是Laravels提供的默认登录和注销。该登录代码的代码是如何添加的。您在
路由
文件中使用yung
中间件
<代码>路由::中间件('auth')->get('/',function(){return view('welcom')})。如果要在
中间件
文件夹中插入新的
,则应将其放入
内核