gpt4 book ai didi

php - Lumen Jwt 身份验证获取(参数 2 传递给 Tymon\JWTAuth\JWTGuard)错误

转载 作者:行者123 更新时间:2023-12-02 02:23:47 25 4
gpt4 key购买 nike

我正在创建一个带有 lumen 的 API 以使用 JWT 身份验证,我执行了 JWT 文档中的所有步骤,如下所示,但是当我测试它时出现错误:

用户模型

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Model implements JWTSubject
{
protected $fillable = [
'username',
'password',
'email',
'fullname',
'natId',
'role',
];

public function Predector()
{
return $this->hasMany('App\Models\Predect');
}

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

授权 Controller

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller
{
//-----------------------------register users ---------------------------------
public function register(Request $request)
{
$password = password_hash($request->password, PASSWORD_DEFAULT);
$users_count= User::where('username',$request->username)->get();
$email_count= User::where('email',$request->email)->get();

$credentials = request(['username', 'password']);
dd(auth()->attempt($credentials));

if(count($users_count)>0){
$data = [
'status' => 'username found',
];
}
else {
if (count($email_count)>0){
$data = [
'status' => 'email is found',
];
}
else {
$user = User::create(
[
'username'=>$request->username,
'password'=>$password,
'email'=>$request->email,
'fullname'=>$request->fullname,
'natId'=>$request->nat_id,
'role'=>'user'
]);

if($user){
$credentials = request(['username', 'password']);

if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
else{
$data = [
'username'=>$request->username,
'password'=>$password,
'email'=>$request->email,
'fullname'=>$request->fullname,
'natId'=>$request->nat_id,
'status' => 'success',
'token' => $token
];}
}
else{
$data = [
'status' => 'failed',
];
}
}
}
return $data;
}
}

bootstrap/app.php ,我添加这些:

$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'admin.auth' => \App\Http\Middleware\AdminMiddleware::class,
]);
$app->register(App\Providers\AuthServiceProvider::class);
$app->register(Tymon\JWTAuth\Providers\LumenServiceProvider::class);
$app->register(Flipbox\LumenGenerator\LumenGeneratorServiceProvider::class);

我的路线:

$router->group(['prefix'=>'api'], function () use ($router) {
$router->post('/register','AuthController@register');
$router->post('/login','AuthController@login');
});

当我在 Insomnia 中测试它时,我得到了这个错误:传递给 Tymon\JWTAuth\JWTGuard::__construct() 的参数 2 必须是 Illuminate\Contracts\Auth\UserProvider 的实例,给定 null,在 E:\Laravel\euro2021\vendor\tymon\jwt-auth\中调用src\Providers\AbstractServiceProvider.php 第 102 行

我在脚步中错过了什么?什么是解决方案?

cong/auth.php

<?php
return [
'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
'passwords' => 'users',
],

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

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
]
],

'passwords' => [
//
],
];

最佳答案

在您的 config/auth.php 中,您可能缺少设置一个 provider 并像这样引用一个守卫

'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
'passwords' => 'users',
],

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

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
]
],

这在 JWT documentation 中有描述.

此外,您的用户模型需要扩展 Authenticable

use Illuminate\Auth\Authenticatable;
use Laravel\Lumen\Auth\Authorizable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
use Authenticatable, Authorizable;

// .. more
}

关于php - Lumen Jwt 身份验证获取(参数 2 传递给 Tymon\JWTAuth\JWTGuard)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65993240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com