我被这个困扰了大约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中调用并定义
请给我一些建议。我是拉雷维尔的新手,为此奋斗了很长一段时间。谢谢
根据以前的经验,可能会发生两个问题
>
api
类用户扩展可验证的实现JWT主题{然后通过如下接口实现功能
/***@inheritDoc*/public函数getJWTIdentifier(){返回$this-
/**
* @inheritDoc
*/
public function getJWTCustomClaims()
{
return [];
}
也可能是您没有生成jwt身份验证密钥
php artisan jwt:secret
有了这个,你应该在你的. env中有一个这样的条目
JWT_SECRET={value generated}
首先,需要在用户模型上实现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设置为默认值。
您正在使用包的较新版本。这要求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
我将感谢任何帮助或反馈。