当前位置: 首页 > 知识库问答 >
问题:

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

强承望
2023-03-14

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

未经身份验证用户的路由忽略授权标头。但是,我想要一个路由组,如果标头有效,它可以利用授权用户数据,如果标头没有设置或无效,它可以做其他事情。

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

共有1个答案

梅飞宇
2023-03-14

为了解决这个难题,我基于JWTAuth GetUserFromToken中间件制作了自己的中间件,并将其添加到内核文件中的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);
    }
}
 类似资料:
  • 在我的Jitsi Meet Prodody配置文件中:~/。jitsi meet cfg/prosody/config/conf.d 我有以下配置: 有了它,我可以通过令牌进行身份验证。 但是,如果我不指定任何令牌,例如: https://jitsi.mydummyserver.com/test 然后我得到以下提示询问用户和密码: 有没有办法只允许令牌身份验证并完全摆脱那个提示? 谢谢

  • 我的任务是用Nginx替换Zuul反向代理。Zuul代理中的安全性是通过 Spring boot api服务的保护方式与 我将Zuul反向代理替换为Nginx作为反向代理。 我如何在Nginx上强制执行安全性,以便没有未经身份验证的请求被

  • 试图使某些路由需要身份验证。 我有这个: 注意:是的,身份验证服务正常工作。 对于每个路由,我检查用户是否经过身份验证,如果没有,那么我想将他们重定向到登录页面,如果他们是,那么它将在第一个页面上着陆,路由为"/"。 我得到的只是: 我哪里做错了?

  • null 我研究了OAuth2隐式授权,但它要求用户在成功验证后批准/拒绝应用程序。它在我的情况下不起作用,因为我同时拥有应用程序和API。 我查看了OAuth2密码授权,它并不完美,因为我需要公开client_id/client_secret。 我关注OAuth2的原因是因为该API最终将是公开的。 忘记OAuth2,在用户发布用户名/密码时手动生成access_token(在本例中,当API公

  • 问题内容: 我一直在研究一个简单的API示例,即带有身份验证的ServiceStack Hello World示例的修改版本。概念验证的目的是创建一个RESTful API,该API包含要求身份验证的服务,这些服务完全可以通过Ajax从多个不同的Web项目访问。 我已经阅读了有关Wiki的认证和授权以及实现CORS的实现,(很多,结果[抱歉,没有足够的信誉指向相关链接])。此时,我的Hello服务

  • 我使用以下方法注册了身份验证器: