繁体   English   中英

Jwt 令牌无法生成

[英]Jwt token unable to generate

我正在尝试在 Laravel 中生成 JWT 令牌。 我正在使用泰蒙。 我在 laravel 5.8 中工作,我需要从 5.4 版本中复制大部分内容。

这是到目前为止我已经尝试过的。

控制器

$payload = (object)array("userid" => $user->userid);
$extra = [
      "userid" => $user->userid,
      "username" => $user->username,
      "useremail" => $user->useremail
   ];

$return = JWTAuth::fromUser($payload, $extra);

用户名

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password',
    ];


    protected $hidden = [
        'password', 'remember_token',
    ];


    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

我正在使用邮递员尝试此操作,但出现此错误:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR)
Argument 1 passed to Tymon\JWTAuth\JWT::fromUser() must be an instance of Tymon\JWTAuth\Contracts\JWTSubject, instance of stdClass given, called in 

要在 Laravel 中使用 JWT 身份验证,您必须按照以下步骤操作 -

  1. 通过以下方式在 Composer.json 中安装:

composer require tymon/jwt-auth

  1. 将服务提供者添加到 config/app.php 配置文件中的 providers 数组中,如下所示:
'providers' => [

    ...

    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
  1. 运行以下命令以发布包配置文件:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

你现在应该有一个 config/jwt.php 文件,允许你配置这个包的基础。

  1. 通过以下命令生成密钥:
php artisan jwt:secret

这应该使用以下内容更新您的 .env 文件:

JWT_SECRET=foobar
  1. 然后将用户模型更新为:
<?php

namespace App;

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
{
    use Notifiable;

    // Rest omitted for brevity

    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}
  1. 最后,将config/auth.php的 Auth 防护config/auth.php为:
'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

...

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

然后你准备好了..

正如错误消息所说,您正在传递一个 stdClass 实例,其中 JWTSubject 实例应作为 JWTAuth::fromUser 方法的第一个参数。

看看这个问题: github问题

开发人员建议传递 User 模型或 Tymon\\JWTAuth\\Contracts\\JWTSubject 接口的实现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM