当前位置: 首页 > 知识库问答 >
问题:

无法在laravel中使用tymon jwt生成令牌

戚侯林
2023-03-14

我被这个困扰了大约3天。基本上,我正在尝试使用Tymon在laravel中生成JWT令牌。这是我的控制器文件。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;
use JWTAuth;
use JWT;
use Tymon\JWTAuthExceptions\JWTException;
use Tymon\JWTAuth\Contracts\JWTSubject as JWTSubject;

class AuthenticateController extends Controller
{
 public function index()
{
 //   
}
 public function authenticate(Request $request)
{

    $user = User::where('email', $request->only('email'))->first(); 
    dd($user); //This does show some output      
    $token = JWTAuth::fromUser($user); //returns error message

    return ["error" => NULL, "token" => $token];

 }
}

我使用Chrome postman测试了此api,但它报告了以下错误:

JWT.php第73行出现错误异常:传递给Tymon\JWTAuth\JWT::fromUser()的参数1必须是第217行上的Tymon\JWTAuth\Contracts\JWTSubject、App\User给定的实例,在/Users/shankerm/mccadin/laravel/vendor/laravel/framework/src/light/Support/Facades/Facade.php中调用并定义

请给我一些建议。我是拉雷维尔的新手,为此奋斗了很长一段时间。谢谢

共有3个答案

郗唯
2023-03-14

根据以前的经验,可能会发生两个问题

>

api

类用户扩展可验证的实现JWT主题{然后通过如下接口实现功能

/***@inheritDoc*/public函数getJWTIdentifier(){返回$this-

/**
 * @inheritDoc
 */
public function getJWTCustomClaims()
{
    return [];
}

也可能是您没有生成jwt身份验证密钥

php artisan jwt:secret

有了这个,你应该在你的. env中有一个这样的条目

JWT_SECRET={value generated}
臧令
2023-03-14

首先,需要在用户模型上实现Tymon\JWTAuth\Contracts\JWTSubject契约,这需要实现两个方法getJWTIdentifier()和getJWTCustomClaims()。

下面是代码的外观示例。请根据您的需要进行必要的更改。

<?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 [];
    }
}

配置Auth防护

注意:只有当您使用Laravel 5.2及以上版本时,这才有效。

在config/auth.php文件中,您需要做一些更改来配置Laravel,以便使用jwt guard为应用程序身份验证提供支持。

对文件进行以下更改:

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

...

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

在这里,我们告诉api guard使用jwt驱动程序,并将api guard设置为默认值。

公良弘毅
2023-03-14

您正在使用包的较新版本。这要求User Model实现此契约。通过在你的模型中这样做来解决它:

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Model implements JWTSubject {
 类似资料:
  • 我使用docusign进行数字签名,在这里我必须创建一个jwt令牌。为此,我一直在使用git repo的代码https://github.com/docusign/docusign-python-client. 得到以下错误引起MaxRetryError(_pool,url,错误或响应错误(原因))urllib3.exceptions.MaxRetryError:HTTPSConnectionpo

  • 首先,让我承认我是API新手,现在我正在和Laravel一起研究JWT。我使用的是tymon\jwt auth(

  • 上下文我在Laravel8中工作,我使用DataTables插件来显示数据库中的记录。正如您将在代码中看到的,我使用Route::resource('animal','AnimalController')创建了所有要执行CRUD的路由。这将为销毁方法生成如下路径:animal/{id} 问题。当我按下特定记录的删除按钮时,记录会被删除,没关系,但是浏览器控制台会返回这个错误:“此路由不支持DELE

  • 问题内容: 1.分享违规 在遵循 http://programmaticponderings.wordpress.com/2012/08/08/convert- vs-2010-database-project-to-ssdt-and-automate-publishing-with-jenkins- part-33 /之后 2.使用MS build构建ms项目 在添加C:\ Windows \

  • 我试图测试我正在构建的一个关于JWT的软件的功能,以了解它,它使用Firebase JWT PHP包 我正在尝试创建一个使用密钥对作为编码/解码的测试用例,但无法获得http://jwt.io页面以使用我的密钥创建令牌。 这些是我使用命令创建的密钥,没有任何修改。 我转到页面,选择HS256/384/512并删除页面默认设置的键。然后我粘贴我的私钥以便对我的数据进行签名。但是,该页面不会生成任何J

  • 我将感谢任何帮助或反馈。