尝试访问 JWT Authenticated Users 内容在 laravel 中给出 401

Posted

技术标签:

【中文标题】尝试访问 JWT Authenticated Users 内容在 laravel 中给出 401【英文标题】:Trying to access JWT Authenticated Users content gives 401 in laravel 【发布时间】:2020-12-22 20:03:10 【问题描述】:

我有 React 前端和 Laravel 后端应用程序,它们使用 JWT 对用户进行身份验证。登录过程正常,我可以使用 JWT 的 me 功能获取经过身份验证的用户。但是现在当我尝试根据经过身份验证的用户访问内容时,我收到 401 错误。我正在添加我的 react axios 函数以及我的 laravel 控制器,该控制器具有给出错误的函数。请指出我做错了什么。很感谢任何形式的帮助。谢谢。

反应 axios 函数:

export const fetchMyApplications = () => 
    return async dispatch => 
        const url = `/auth/my-applications`;
        var formdata = new FormData();
        const token = getCookie("userToken");

        const response = await api
            .get(
                url, 
                
                    headers: 
                      Authorization: `Bearer $token`
                    
                
            )
            .then(res => 
                return res;
            )
            .catch(error => 
                return error.response;
            );
        
        dispatch(
            type: "FETCH_MY_APLICATIONS",
            payload: response
        );
    ;



Laravel 控制器:

<?php

namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Models\Application;

class ApplyController extends Controller


    public function __construct()
    
        \Config::set('auth.providers.users.model', \App\Applicant::class);
        $this->middleware('auth:api', ['except' =['personalDetails']]);
    

    public function myApplications()
        try 
            $user = auth()->userOrFail();
            $applications = Application::where('applicant_id', $user->applicant_id)->with('course')->get();
            return response()->json(['applications'=> $applications], 200);
        catch (\Tymon\JWTAuth\Exceptions\UserNotDefinedException $e) 
            return response()->json(['status'=> false, 'errors'=> 'Unauthenticated User'], 401);
        
    



身份验证配置:

'defaults' => [
   'guard' => 'api',
   'passwords' => 'users',
],
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

邮递员检查登录用户:

邮递员试图获取登录用户的应用程序:

【问题讨论】:

【参考方案1】:

我知道出了什么问题。实际上这不是我的代码,而是 linode 服务器上的 apache 配置。我在 apache 配置文件中添加了授权标头,它起作用了。

【讨论】:

以上是关于尝试访问 JWT Authenticated Users 内容在 laravel 中给出 401的主要内容,如果未能解决你的问题,请参考以下文章

确保 AUTHENTICATED 用户被授权访问资源的最佳实践 - Spring mvc、Spring Security、Hibernate

使用 @PreAuthorize 的 GraphQL 和 Spring Security?

从 Azure Active Directory 验证 JWT

使用刷新的 JWT 令牌调用 API

尝试使用 express-jwt 阻止访问除登录页面以外的 Angular 应用程序时出现问题

尝试访问我的 api 平台时未找到 JWT 令牌 401 错误?