【问题标题】:Laravel 5.1 App\Http\Controllers\JWT class not foundLaravel 5.1 App\Http\Controllers\JWT 类未找到
【发布时间】:2016-03-13 03:49:04
【问题描述】:

我正在使用 JWT 在我的 angular - laravel 应用程序中进行身份验证。一切正常,除了需要生成令牌时,我得到一个错误

App\Http\Controllers\JWT

我尝试在 AuthController 中添加以下行:-

use Tymon\JWTAuth\Providers\JWTAuthServiceProvider;

use App\Http\Controllers\JWT;

use JWT;

但似乎没有任何效果

我的 composer.json :-

"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*",
    "tymon/jwt-auth": "0.5.*"
},

AuthController -

$payload = [
        'sub' => $user->id,
        'iat' => time(),
        'exp' => time() + (2 * 7 * 24 * 60 * 60)
    ];
    return JWT::encode($payload, Config::get('app.token_secret'));

public function signup(Request $request){
    $user = new User;
    $user->name = $request->input('displayName');
    $user->email = $request->input('email');
    /*$user->password = Hash::make($request->input('password'));*/
    $user->password = $request->input('password');
    $user->save();
    return response()->json(['token' => $this->createToken($user)]);
}

【问题讨论】:

  • 你能显示文件的内容吗?
  • 它在 laravel.log 中 - local.ERROR: 异常 'Symfony\Component\Debug\Exception\FatalErrorException' 带有消息 'Class 'App\Http\Controllers\JWT' not found'
  • JWT 类的文件路径是什么?
  • 有点脱离上下文,但是将id 暴露在前端是一种不好的做法。您没有使用 Tymon 的 JWT 提供的功能。理想情况下,您不需要携带有效载荷。只需转到config 目录,您将看到JWT.php 并在此处添加您的expiryidentifier
  • 是的,我同意这一点,但它将是 JWT 令牌的一部分,您将返回到前端,可以在 jwt.io 等网站上轻松解码,这暴露了 @ 987654333@。我的建议是在令牌中使用uuid

标签: laravel laravel-5.1 jwt json-web-token


【解决方案1】:

试试,

JWTAuth;

但是,JWTAuth::encode 不存在,如果你必须使用encode 方法,那么试试这个,

use Tymon\JWTAuth\JWTManager as JWT;

然后就可以访问encode方法

$customClaims = [
    'sub' => $user->id,
    'iat' => time(),
    'exp' => time() + (2 * 7 * 24 * 60 * 60)
];

$payload = app('tymon.jwt.payload.factory')->make($customClaims);

return JWT::encode($payload, Config::get('app.token_secret'));

【讨论】:

  • AuthController 无法识别 Tymon\JWTAuth\JWTAuth..它在其下方显示红线..
  • 这对我有用 - 我使用 [ 使用 JWTAuth;使用 Tymon\JWTAuth\JWTManager 作为 JWT;]
  • 但我现在又遇到另一个错误 - local.ERROR: 异常 'ErrorException' 和消息 'Argument 1 pass to Tymon\JWTAuth\JWTManager::encode() must be an instance of Tymon\JWTAuth\有效载荷,给定数组
  • 这解决了它 $payload = app('tymon.jwt.payload.factory')->make($customClaims);
  • 是的编码方法需要 Payload 实例,public function encode(Payload $payload) { $token = $this->jwt->encode($payload->get()); return new Token($token); }
【解决方案2】:

这应该只是一个命名空间问题。我想你想要JWTAuth 门面。

use JWTAuth;  // if added to aliases as the install mentions
use Tymon\JWTAuth\Facades\JWTAuth; // if not aliased

更新:如果您没有更改类内的代码,这意味着您仍有对 JWT 的调用,您可以为这些导入设置别名,而不必更改对 JWT 的调用。

use JWTAuth as JWT;
use Tymon\JWTAuth\Facades\JWTAuth as JWT;

【讨论】:

  • 不,不工作,这个 Tymon\JWTAuth\Facades\JWTAuth 在 AuthController.php 中给出错误 - 我的意思是一条红线。
  • 什么错误?你将不得不改变你使用它的方式。而不是JWT::,您将使用它作为JWTAuth ...跟进,您是否按照安装说明进行操作?
  • 我是否必须对 kernal.php 和 config/app.php 进行更改然后发布..?
  • 我按照这个教程安装 JWT - scotch.io/tutorials/…
  • 我会按照包 github wiki 中的安装说明进行操作。 github.com/tymondesigns/jwt-auth/wiki/Installation
猜你喜欢
  • 1970-01-01
  • 2018-04-02
  • 2015-06-24
  • 2021-09-25
  • 2015-05-21
  • 2015-08-31
  • 2018-03-16
  • 1970-01-01
  • 2017-03-27
相关资源
最近更新 更多