JSON Web Token 仅适用于具有 Eloquent 模型的 Laravel
Posted
技术标签:
【中文标题】JSON Web Token 仅适用于具有 Eloquent 模型的 Laravel【英文标题】:JSON Web Token only work in Laravel with Eloquent model 【发布时间】:2015-12-28 12:50:33 【问题描述】:我正在使用 Laravel,我想使用 JSON Web Token (JWT)。我下载了tymon vendor。当我尝试生成令牌时,它引发了一个错误,说我的模型不是 Eloquent 模型的实例。所以我检查了供应商代码,我在EloquentUserAdapter
看到了这个:
<?php
namespace Tymon\JWTAuth\Providers\User;
use Illuminate\Database\Eloquent\Model;
class EloquentUserAdapter implements UserInterface
/**
* @var \Illuminate\Database\Eloquent\Model
*/
protected $user;
/**
* Create a new User instance
*
* @param \Illuminate\Database\Eloquent\Model $user
*/
public function __construct(Model $user)
$this->user = $user;
/**
* Get the user by the given key, value
*
* @param mixed $key
* @param mixed $value
* @return Illuminate\Database\Eloquent\Model
*/
public function getBy($key, $value)
return $this->user->where($key, $value)->first();
我的问题是这个适配器只使用 Eloquent 模型 注入。我正在使用 Doctrine 模型。所以我的问题是:
-
是否可以更改此适配器以返回新模型(我的学说
模型)。我问是因为我是 PHP 和 Laravel 的新手,我看到了
EloquentUserAdapter 用在 vendor 的其他地方。
如果我创建一个新的适配器,我认为我必须返回一个 Eloquent
模型,那么我如何只重新定义模型并重用另一个
供应商的类和方法?
有什么线索吗?
【问题讨论】:
【参考方案1】:-
是的,您可以:
use App\Entities\User;
use Doctrine\ORM\EntityManagerInterface;
use Tymon\JWTAuth\Providers\User\UserInterface;
class DoctrineUserAdapter implements UserInterface
protected $em;
public function __construct(User $user, EntityManagerInterface $em)
$this->em = $em;
public function getBy($key, $value)
return $this->em->find('App\Entities\User', $value);
您可以注入 EntityManagerInterface 对象作为第二个参数,第一个参数是 jwt.php 配置中“providers.user”中的用户模型类型,为什么?看JWTAuthServiceProvider.php
中的代码:
/**
* Register the bindings for the User provider.
*/
protected function registerUserProvider()
$this->app['tymon.jwt.provider.user'] = $this->app->share(function ($app)
return $app->make($this->config('providers.user'), [$app->make($this->config('user'))]);
);
我的简单用户模型:
use DOctrine\ORM\Mapping as ORM;
/**
* Users *
* @ORM\Table(name="users")
* @ORM\Entity
*/
class User implements \Illuminate\Contracts\Auth\Authenticatable
use \LaravelDoctrine\ORM\Auth\Authenticatable;
/**
*
* @var integer *
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
public $id;
-
您可以在版本 1.0.0 中执行此操作。更多问题:https://github.com/tymondesigns/jwt-auth/issues/343
【讨论】:
以上是关于JSON Web Token 仅适用于具有 Eloquent 模型的 Laravel的主要内容,如果未能解决你的问题,请参考以下文章