【问题标题】:Laravel JWT Return Token But Returns Unauthenticated On Subsequent RequestLaravel JWT 返回令牌但在后续请求中返回未经身份验证
【发布时间】:2021-02-02 08:43:08
【问题描述】:

我一直遇到这个问题,每当我登录时,我都会得到我的 jwt 令牌,但是每当我尝试使用该令牌在与 auth:api 中间件绑定的不同路由上发出其他请求时,它都会不断返回 @ 987654321@。因此,我无法提出任何要求。

谁能帮忙

路线看起来像

Route::prefix('auth')->group(function () {

Route::post('login', [LoginController::class, 'login'])->name('login');
Route::post('refresh', [LoginController::class, 'handleRefreshToken'])->name('refresh');
Route::post('me', [LoginController::class, 'userDetails'])->name("user_details");
});

为什么我的控制器看起来像

<?PHP

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginController\LoginValidator;
use App\Traits\SendsApiResponse;
use Illuminate\Http\Response;

class LoginController extends Controller
{
use SendsApiResponse;

/**
 * Create a new AuthController instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('auth:api', ['except' => ['login', 'refresh']]);
}

/**
 * Handles User Login
 * @param LoginValidator $request
 * @return \Illuminate\Http\JsonResponse|mixed
 */
public function login(LoginValidator $request)
{
    try {
        $login_cred = $request->validated();
        $token = auth()->attempt($login_cred);
        if (!$token) {
            return $this->failureResponse("Incorrect UserName and/or Password", Response::HTTP_UNAUTHORIZED);
        }

        return $this->successResponse($this->returnToken($token));
    } catch (\Exception $e) {
        return $this->failureResponse($e->getMessage(), $e->getCode());
    }
}

public function returnToken($token)
{
    return [
        "token" => $token
    ];
}

/**
 * Handle The Refreshing Of Users Token
 * @return \Illuminate\Http\JsonResponse|mixed
 */
public function handleRefreshToken()
{
    try {
        return $this->successResponse($this->returnToken(auth()->refresh($forceForever = true)));
    } catch (\Exception $e) {
        return $this->failureResponse($e->getMessage(), 440);
    }
}

public function userDetails()
{
    return $this->successResponse(auth()->user());
}

}

以上所有方法中,只有登录有效,其余无效

【问题讨论】:

  • 提供一些你尝试过的代码。
  • 什么类型的代码?请指定您希望看到我的代码的哪一部分,以便我特别知道要提供什么
  • 您的登录代码和您的路线。
  • 给出的信息几乎为零,很难提供帮助。也许令牌已过期,也许使用了错误的密钥来验证,也许您希望令牌中有某个您未设置的声明(例如 aud),也许还有其他东西,....您如何创建令牌,以及如何验证?
  • @jps,我只是按照 tymon/jwt 文档建议的实现

标签: php laravel jwt jwt-auth laravel-8


【解决方案1】:

取决于您发送令牌的方式:

当令牌丢失、过期或错误时,此包将始终返回 Unauthenticated。 将带有Bearer [your token]Authorization 标头添加到请求中并再次发送,然后检查它是否仍然返回Unauthenticated

处理此逻辑的代码包含在auth:api 中间件中,但只有在config/auth.php 文件中正确配置它才能工作。

【讨论】:

  • 是的,我配置正确。这很神秘,为什么它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2017-04-24
  • 1970-01-01
  • 2020-10-20
  • 2018-08-07
  • 2018-01-05
相关资源
最近更新 更多