首页 > 解决方案 > 没有 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 令牌,中间件也会拒绝访问。

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

标签: phplaraveljwt

解决方案


推荐阅读