[英]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 身份验证,您必须按照以下步骤操作 -
composer require tymon/jwt-auth
'providers' => [
...
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
你现在应该有一个 config/jwt.php 文件,允许你配置这个包的基础。
php artisan jwt:secret
这应该使用以下内容更新您的 .env 文件:
JWT_SECRET=foobar
<?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 [];
}
}
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.