Lumen JWT身份验证通过防护

问题描述 投票:0回答:1

我使用Lumen和JWT身份验证时遇到一个奇怪的错误。我们创建了一个移动应用程序和一个Web应用程序,并使用JWT Auth对用户进行身份验证。当出现一些错误时,我们已添加了一些电子邮件日志记录,因此我们可以对其进行热修复。

问题解释:有时,我们的用户通过JWT中间件或Guard,并且执行了经过身份验证保护的代码。

今天早晨,我们收到了如下所示的SQL错误:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmltZ3VyLmNvbS9jRW5LZ3hXLnBuZyJ9” alt =“错误图片”>例如,我们有一个MobileController女巫扩展了主Controller。在主控制器中,我们将此代码编写为__construct方法

if(Auth::check() && Auth::user() == NULL) {
    Auth::logout();
    return abort(401, 'Unauthorized.');
}

即使使用上面的代码,用户也会通过身份验证保护。

这是我们的代码示例:

routes / web.php

$router->group(['middleware' => 'auth:user'], function ($router) {
    $router->group(['prefix' => 'mobile/'], function ($router) {
        $router->post('/company/department', ['uses' => 'MobileController@createCompanyDepartment']);
    });
});

app / Http / Controllers / Controller.php

class Controller extends BaseController
{
    /**
     * Assigned table
     * for this model
     *
     * @var string
     */
    protected $user;
    protected $client;
    protected $company;

    public function __construct()
    {
        if(Auth::check() && Auth::user() == NULL) {
            Auth::logout();
            return abort(401, 'Unauthorized.');
        }

        if(Auth::guard('user')->check()) {
            $this->user = Auth::user();
            $this->company = Company::join('languages', 'languages.id', '=', 'companies.language_id')
                ->select('companies.*', 'languages.code as language_code')
                ->find($this->user->company_id);
        } else if(Auth::guard('client')->check()) {
            $this->client = Auth::guard('user')->client();
        } else {
            $this->user = NULL;
        }
    }
}

app / Http / Controllers / MobileController.php

public function createCompanyDepartment(Request $request)
{
    $this->validate($request, [
        'name'  => 'required',
    ]);

    Department::createDepartment($this->user->company_id, $request->input('name'));
    $response = Department::getMobileDepartmentsByCompany($this->user);

    return response()->json($response);
}

我们希望未经授权的用户会收到未经授权的401错误,但某些东西会超出警惕。如果我们尝试在未经身份验证的本地运行代码,则会收到“未授权401”消息,但在生产环境中,有时我们的用户会越过保护措施。令牌可能过期了?这是我的.env

AUTH_GUARD=user
JWT_KEY=XXXXXXXXXXXXXXXXXXXXX
JWT_EXPIRE_AFTER=25920000

任何人都经历过这个问题或有任何想法为什么会发生这种情况?谢谢!

php laravel api jwt lumen
1个回答
0
投票

尝试:

if(!Auth::check() || Auth::user() == NULL) {
    Auth::logout();
    return abort(401, 'Unauthorized.');
}

由于在用户is进行身份验证时Auth:check()返回true,所以如果出现以下情况,您想要的是中止:

[用户未认证]或[用户为null]

© www.soinside.com 2019 - 2024. All rights reserved.