php 未找到类Firebase\JWT\JWT

vbopmzt1  于 2023-05-16  发布在  PHP
关注(0)|答案(5)|浏览(401)

我想在我的代码中使用纯firebase/php-jwt库。首先,我转到/var/www/html/,就像官方库页面所建议的那样,我这样做

composer require firebase/php-jwt

运行此命令后,我看到在/var/www/html/中创建了一个新的供应商文件夹,其中包含许多文件和子文件夹。然后,我在/var/www/html/中创建了我的token.php文件,其内容与官方页面中的内容相似:

<?php
use \Firebase\JWT\JWT;

$key = "example_key";
$token = array(
    "iss" => "http://example.org",
    "aud" => "http://example.com",
    "iat" => 1356999524,
    "nbf" => 1357000000
);

$jwt = JWT::encode($token, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));

print_r($decoded);

但是,当我转到 * localhost/token.php * 时,我得到以下错误消息:
致命错误:未捕获错误:/var/www/html/token.php:12堆栈跟踪:#0 {main}在/var/www/html/token. php第12行抛出
我不知道这是否重要,但我的PHP版本是7.0。

ryoqjall

ryoqjall1#

根据文档,您需要包括自动加载器。
例如,在你的php文件中:

require __DIR__ . '/vendor/autoload.php';

但是......通常您的vendor文件夹将与html文件夹(您提供内容的文件夹)处于同一级别。
例如:

- Project root
--- vendor
--- html
----- index.php

在index.php中,你可以这样做:

require __DIR__ . '/../vendor/autoload.php';

你尝试使用composer和modules是很好的,但是如果我是你,我会尝试阅读一些关于php的autoloading features的内容,这样你就会明白发生了什么,以及如何从中获利。

alen0pnh

alen0pnh2#

如果不使用composer来维护结构。只是删除

namespace Firebase\JWT;
use \DomainException;
use \InvalidArgumentException;
use \UnexpectedValueException;
use \DateTime;

* 
* JSON Web Token implementation, based on this spec:
* https://tools.ietf.org/html/rfc7519
 *
* PHP version 5
*
* @category Authentication
* @package  Authentication_JWT
* @author   Neuman Vong <neuman@twilio.com>
* @author   Anant Narayanan <anant@php.net>
* @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
* @link     https://github.com/firebase/php-jwt

形成你的JWT.php文件。它对我来说很好,知道。

6rvt4ljy

6rvt4ljy3#

我只在你的代码中添加了一行代码来让我的代码工作:

require __DIR__ . '\vendor\autoload.php';
use Firebase\JWT\JWT;

/* the rest of your code after this */

我根本不需要修改jwt.php文件。

bgtovc5b

bgtovc5b4#

取决于您是否使用composer,如果不使用composer,请尝试删除use部分:

namespace Firebase\JWT;
use \DomainException;
use \InvalidArgumentException;
use \UnexpectedValueException;
use \DateTime;

如果你使用的是composer,请确保你的自动加载器已加载

qrjkbowd

qrjkbowd5#

当我不使用composer时,我只是在我的入口点PHP文件中加载所有JWT类,然后在类中使用主名称空间而不是使用JWT。例如,在我的index.php中:

require_once 'vendor/jwt/JWT.php';
require_once 'vendor/jwt/SignatureInvalidException.php';
require_once 'vendor/jwt/BeforeValidException.php';
require_once 'vendor/jwt/ExpiredException.php';
require_once 'vendor/jwt/JWK.php';

//Namespaces
use \Firebase\JWT\JWT;

在Auth.php类文件中:

//Import the Namespace again
use \Firebase\JWT\JWT;

我真的不知道当你没有自动加载器文件时,这是否是正确的方法,通常是非常小的项目,但它对我有效,可能其他人也在处理这个问题。不过,我认识到最好的方法是安装 composer :)

相关问题