我正在开发一个API,该API使用默认情况下不受Laravel支持的非标准数据库连接。因此,我无法使用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令牌,中间件也会拒绝访问。
感谢您的帮助,因为我不知道如何进一步开发用户身份验证。