我想在我的代码中使用纯 firebase/php-jwt 库。首先,我去/var/www/html/
,就像官方图书馆页面建议的那样,我这样做
composer require firebase/php-jwt
运行此命令后,我看到在/var/www/html/
内创建了一个新的供应商文件夹,其中包含大量文件和子文件夹。然后,我在/var/www/html/
中创建我的token.php
文件,其内容类似于官方页面的内容:
<?php
use FirebaseJWTJWT;
$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);
但是,当我转到本地主机/令牌.php时,我收到此错误消息:
致命错误:未捕获错误:在/var/www/html/token.php:12 中找不到类"Firebase\JWT\JWT" 堆栈跟踪:#0 {main} 在第 12 行的/var/www/html/token.php 中抛出
我不确定这是否重要,但我的 PHP 版本是 7.0。
根据文档,您需要包含自动加载器。
例如,在您的 php 文件中:
require __DIR__ . '/vendor/autoload.php';
但。。。通常,您的vendor
文件夹与html
文件夹(您在其中提供内容的文件夹)处于同一级别。
例如:
- Project root
--- vendor
--- html
----- index.php
然后在索引中.php您将执行以下操作:
require __DIR__ . '/../vendor/autoload.php';
很高兴您尝试使用作曲家和模块,但是如果我是您,我会尝试阅读一些有关php的自动加载功能的信息,以便您了解正在发生的事情以及如何从中获利。
如果不使用作曲家来维护结构。 只需删除
namespace FirebaseJWT;
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 文件。我知道它工作正常。
我只在你的代码中添加了一行来让我的代码工作:
require __DIR__ . 'vendorautoload.php';
use FirebaseJWTJWT;
/* the rest of your code after this */
我根本不需要修改 jwt.php 文件。
取决于你是否使用作曲家,如果不使用作曲家,请尝试删除使用部分:
namespace FirebaseJWT;
use DomainException;
use InvalidArgumentException;
use UnexpectedValueException;
use DateTime;
如果您使用的是作曲家,请确保您的自动加载器已加载
当我不使用 composer 时,我只是在我的入口点 PHP 文件中加载所有 JWT 类,然后,在类中使用主命名空间,而不是必须使用 JWT。例如,在我的索引中.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 FirebaseJWTJWT;
在 Auth.php 类文件中:
//Import the Namespace again
use FirebaseJWTJWT;
我真的不知道当你没有自动加载器文件时,这是否是正确的方法,通常是非常小的项目,但它对我有用,可能其他人也在处理这个问题。但是,我认识到最好的方法是安装作曲家:)
最近遇到了这个。问题似乎是某处命名空间中的冲突。溶液;我将 JWT 类复制到我的本地库文件夹(应用程序/库)中,并使用AppLibrariesJWT
命名空间从该文件夹导入。完美工作。