Laravel:目标 [Lcobucci\JWT\Parser] 不可实例化

Edd*_*ers 12 php laravel

嘿,我在尝试使用 Laravel 护照登录时在我的 prod 网站上遇到了问题。它说我的 Lcobucci JWT Parser 不可实例化。它在本地适用于我,但不适用于我的遥控器。

我该如何解决这个问题?

错误:

exception: "Illuminate\Contracts\Container\BindingResolutionException"
file: "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php"
line: 1038
message: "Target [Lcobucci\JWT\Parser] is not instantiable while building [Laravel\Passport\PersonalAccessTokenFactory]."
trace: [,…]
Run Code Online (Sandbox Code Playgroud)

登录控制器方法:

public function login(Request $request) {

        $login = $request->validate([
            'email' => 'required:string',
            'password' => 'required:string'
        ]);

        if(filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
            //user sent their email 
            Auth::attempt(['email' => $request->email, 'password' => $request->password]);
        } else {
            //they sent their username instead 
            Auth::attempt(['username' => $request->email, 'password' => $request->password]);
        }

        if(!Auth::check()) {
            return response([
                'status' => 'fail',
                'message' => 'Invalid credentials'
            ]);
        }

        $accessToken = Auth::user()
            ->createToken('authToken')
            ->accessToken;
        
        return response([
            'status' => 'success',
            'user' => new User_Resource(Auth::user()),
            'access_token' => $accessToken 
        ]);
    }
Run Code Online (Sandbox Code Playgroud)

Gam*_*llo 23

我也遇到了同样的问题,在你的项目 composer.json 中添加 "lcobucci/jwt": "3.3.3" 并执行 composer update。我在:https : //github.com/laravel/passport/issues/1381上找到了这个解决方案。


Ace*_*ngs 6

Laravel : "8" 和 Lcobucci\JWT : "^3.4"

解决方案: 解决方案图片

use Lcobucci\JWT\Encoding\JoseEncoder;
use Lcobucci\JWT\Token\Parser;
.
.
...
public function GetTokenId(Request $request)
{
  // Get the Access_Token from the request
  $Token = $request->bearerToken();
  // Parse the Access_Token to get the claims from them the jti(Json Token Id)
  $TokenId = (new Parser(new JoseEncoder()))->parse($token)->claims()
   ->all()['jti'];
  return $tokenId;
}
Run Code Online (Sandbox Code Playgroud)