php - 没有 Eloquent 和 MySQL 的 Lumen JWT 身份验证
问题描述
我正在开发一个使用 Laravel 默认不支持的非标准数据库连接的 API。因此,我无法使用 Eloquent 模型来创建 JWT 令牌和验证用户。我已经实现了一个自定义用户模型:
use App\Repositories\Technician as TechnicianRepository;
use Illuminate\Contracts\Auth\Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;
class Technician implements Authenticatable, JWTSubject {
public function __construct(array $data) {
$this->repository = new TechnicianRepository;
foreach ($this->repository->create($data) as $attribute => $value) {
$this->{$attribute} = $value;
}
}
public function getAuthIdentifierName() {
return 'id';
}
public function getAuthIdentifier() {
return $this->{$this->getAuthIdentifierName()};
}
public function getAuthPassword() {
return decrypt($this->password);
}
public function getRememberToken() {}
public function setRememberToken($value) {}
public function getRememberTokenName() {}
public function getJWTIdentifier()
{
return $this->id;
}
public function getJWTCustomClaims()
{
return [];
}
}
使用此模型,我能够在我的 AuthController 中成功生成 JWT 令牌,如下所示:
$technician = new Technician([
'email' => $request->email,
'phone' => $request->phone,
'password' => encrypt($request->password)
]);
$token = app('auth')->login($technician);
但是我不知道如何根据生成的随请求传递的 JWT 令牌进一步验证用户身份。
现在我在引导方法中有以下内容AuthServiceProvider
:
public function boot()
{
$this->app['auth']->viaRequest('api', function ($request) {
return app('auth')->setRequest($request)->user();
});
}
Authenticate
中间件中的以下逻辑:
if ($this->auth->guard($guard)->guest()) {
return Response::fail([
'auth' => array('Access denied - authorization is required')
], 401);
}
return $next($request);
即使为用户提供正确的 JWT 令牌,中间件也会拒绝访问。
感谢您提供任何帮助,因为我不知道如何进一步开发用户身份验证。
解决方案
推荐阅读
- vb.net - 直接打印数据表值
- gis - QGIS - 转换或保存临时暂存层
- nginx - Nginx 重写将流量发送到 IP 地址,而不是 URL
- ios - iOS 上的 cordova-plugin-purchase:如果不先卸载应用程序,order() 将无法工作
- r - 嵌套循环有问题 (R)
- python - 我想复制网页中的所有文本并将其粘贴到 word 文件中。我正在使用硒和 python
- apache - 为所有页面返回 410,但有例外
- in-app-purchase - RevenueCart 是否处理来自 Play 商店的定价模板?
- c# - 如何在 C# 的控制台中直观地打印字母?
- java - 如何从 AssumeRole 刷新凭据以增加其时间限制?