使用Lumen和JWT身份验证时出现一个奇怪的错误。 我们创建了一个移动应用程序和一个Web应用程序,并使用JWT Auth对用户进行身份验证。当出现一些错误时,我们添加了一些电子邮件日志记录,以便我们进行热修复。
问题解释: 有时,我们的用户会通过JWT中间件或Guard,而被执行为经过身份验证保护的代码会执行。
今天早晨,我们收到了如下的SQL错误:
例如,我们有一个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
任何人都经历过这个问题或有任何想法为什么会发生这种情况?谢谢!
答案 0 :(得分:0)
尝试:
if(!Auth::check() || Auth::user() == NULL) {
Auth::logout();
return abort(401, 'Unauthorized.');
}
由于Auth:check()
在用户得到认证后返回true
,因此,如果发生以下情况,您要中止的操作:
[用户未通过身份验证]或[用户是
null
]