【问题标题】:Auth doesn't work on custom middlewareAuth 不适用于自定义中间件
【发布时间】:2018-01-16 09:56:37
【问题描述】:

我在 LoginController 中修改了登录功能,这是我写的

public function login(Request $request)
{
    $data = $request->all();
    if($this->validateLogin((array)$data))
    {
        $cred = $request->email;
        $cred_p = $request->password;

        //if()
        $user = User::select('id', 'password')->where('email','=',$cred)->first();

        if(count($user) == 1)
        {
            if(Hash::check($cred_p, $user->password))
            {
                $user_id = $user->id;

                $status = User_status::select('is_active', 'is_completed')->where('user_id','=',$user_id)-> first();

                $active = $status->is_active;
                //dd($status->is_active);
                if($active == 0)
                {
                    return redirect()->to('/login')->withErrors(['status'=>"Your account is blocked. Please contact administrator or visit here <a href='/support/acount-blocked'>Support Center</a>"]);
                }
                else
                {
                        $this->attemptLogin($request);

                        $this->sendLoginResponse($request);                
                }
            }
            else
            {
                if ($this->hasTooManyLoginAttempts($request)) {
                    $this->fireLockoutEvent($request);

                    return $this->sendLockoutResponse($request);
                }
                $this->incrementLoginAttempts($request);
                return $this->sendFailedLoginResponse($request);
            }

        }
        else
        {
            return $this->sendFailedLoginResponse($request);
        }
    }
    else
    {
        return $this->sendFailedLoginResponse($request);
    }
}

这似乎工作正常,Auth::user() 工作正常,但是当我添加新的中间件 IsCompletedMiddleware 并检查 dd(Auth::user()); 时,这将返回 null 值。

public function handle($request, Closure $next)
{

    /*if(Auth::user()->status->is_completed == 0)
    {
        return redirect()->to('/profile/management/complete');
    }*/
    return $next($request);
}

我还在中间件的标头中包含了use Auth;,但它总是返回空值。在其他控制器中Auth::user() 返回正确的用户。为什么会这样?以及缺少什么。请帮忙谢谢。

【问题讨论】:

  • 尝试在你的中间件中使用全局帮助器auth()-&gt;user()
  • 空值:(从来没有遇到过这样的问题我认为自定义登录功能与它有关
  • 我已搜索您的问题answer-er 建议添加web 中间件以便访问Auth::user()
  • 网络?这是什么?
  • 您可以围绕处理登录过程的路由Route::group(['middleware' =&gt; ['web']], function () { // your login route })查看docs

标签: php laravel authentication laravel-5 laravel-5.3


【解决方案1】:

在您的中间件中,您必须让用户正在执行请求,尝试这样做:

public function handle($request, Closure $next)
{
    $request = $next($request);
    if($request->user()->status->is_completed == 0){
        return redirect()->to('/profile/management/complete');
    }

    return $request;
}

【讨论】:

  • 还是空值兄弟
  • 您在路由中添加了哪些中间件?
  • ->中间件('myware');
  • 我编辑了我的答案,请在您提出请求后尝试执行您的中间件。您得到 user null 是因为您在对用户进行身份验证之前正在执行中间件。
猜你喜欢
  • 2023-01-18
  • 2020-04-18
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2011-12-08
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多