如何允许任何用户使用 Laravel JWT 身份验证访问路由?

Posted

技术标签:

【中文标题】如何允许任何用户使用 Laravel JWT 身份验证访问路由?【英文标题】:How to allow any user to access a route with Laravel JWT Authentication? 【发布时间】:2016-12-27 05:26:29 【问题描述】:

我正在为我的 Laravel REST API 使用 Tymon/JWT-Auth 包。在我的 routes.php 文件中,我可以添加用于未经身份验证的用户的路由和用于经过身份验证的用户的路由。

未经身份验证的用户的路由会忽略授权标头。但是,我想要一个路由组,如果标头有效,则可以使用授权用户数据,如果标头未设置或无效,则可以执行其他操作。

有没有办法实现这样的功能,或者JWTAuth包内置中间件中的解决方案?

【问题讨论】:

【参考方案1】:

为了解决这个难题,我基于 JWTAuth GetUserFromToken 中间件制作了自己的中间件,并将其添加到 Kernel 文件中的 routeMiddleware 数组中。

路由中间件

<?php

namespace App\Http\Middleware;

use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;

class NeutralRoute extends \Tymon\JWTAuth\Middleware\BaseMiddleware

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, \Closure $next)
    
        $token = $this->auth->setRequest($request)->getToken();

        if($token)
            try 
                $user = $this->auth->authenticate($token);
             catch (TokenExpiredException $e) 
                return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]);
             catch (JWTException $e) 
                return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]);
            
            if($user)
                $this->events->fire('tymon.jwt.valid', $user);
            
        

        return $next($request);
    

【讨论】:

以上是关于如何允许任何用户使用 Laravel JWT 身份验证访问路由?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 5 设置 JWT-Auth

(API) Laravel 7 上不允许使用 tymon/jwt-auth 的 405 方法

Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作

jwt api 身份验证如何工作(使用 dingo-laravel)

如何使用基于 JWT 令牌的 express 获取经过身份验证的用户信息

Laravel,如何从自定义表的 jwt 令牌获取登录用户