没有Eloquent和MySQL的Lumen JWT身份验证

时间:2018-07-22 16:19:48

标签: php laravel jwt

我正在开发一个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令牌,中间件也会拒绝访问。

感谢您的帮助,因为我不知道如何进一步开发用户身份验证。

0 个答案:

没有答案