当前位置: 首页 > 知识库问答 >
问题:

Auth不处理自定义中间件

鲍俊杰
2023-03-14

我修改了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()) 返回空值。

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

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

我还包括使用Auth位于中间件的标头中,但它始终返回空值。在其他控制器中,Auth::user()返回正确的用户。为什么会这样?缺少什么。请帮忙,谢谢。


共有1个答案

苗运珧
2023-03-14

在你的中间件中,你必须让用户正在做请求,试着这样做:

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

    return $request;
}
 类似资料:
  • 问题内容: 我有许多需要自定义编组的结构。在测试时,我使用的是JSON和标准的JSON marshaller。由于它不会封送未导出的字段,因此我需要编写一个自定义的MarshalJSON函数,该函数运行良好。当我在父结构上调用json.Marshal时,该结构包含需要自定义编组的字段,它工作正常。 现在,我需要将所有内容封送给BSON进行MongoDB的工作,而我找不到任何有关如何编写自定义BSO

  • 所有的错误最终都会被 Tango.ErrHandler 进行处理。 你可以自定义你的错误处理方式来替代默认的。例如: var ( prefix = "<html><head>tango</head><body><div>" suffix = fmt.Sprintf("</div><div>version: %s</div></body></html>", tango.Version

  • 404和500错误客户端和服务端都会通过error.js组件处理。如果你想改写它,则新建_error.js在文件夹中: import React from 'react' export default class Error extends React.Component { static getInitialProps({ res, err }) { const statusCod

  • 中间件是 WebHook 的一种变种模式,不同的是它早于 WebHook 执行,你可以做一些有用的前置拦截,比如 token 校验、日志记录等等。 实现一个中间件可以参考一个例子: public class BasicAuthMiddleware implements WebHook { private static final int AUTH_LENGTH = 6; priv

  • 如果数据库表中的列名和等价的javabean对象名称不相似,那么我们可以通过使用自定义的对象来映射它们。 看下面的例子。 为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。创建一个示例应用程序。 更新在DBUtils入门程序中创建的文件:MainApp.java。 按照下面的说明编译并运行应用程序。 以下是的内容。 以下是文件的内容。 以下是文件的内容。 完成创建源文件后

  • 可以通过实现接口或扩展任何现有的实现来创建自己的自定义处理程序。 在下面的示例中,我们通过扩展类创建了自定义处理程序。 为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。 更新在DBUtils入门程序中创建的文件:MainApp.java。 按照下面的说明编译并运行应用程序。 以下是的内容。 以下是文件的内容。 以下是文件的内容。 完成创建源文件后