为了账号安全,请及时绑定邮箱和手机立即绑定

使用 JWT 成功认证后如何触发事件

使用 JWT 成功认证后如何触发事件

PHP
慕田峪9158850 2022-07-09 18:17:38
我有一个 Laravel 版本 6 应用程序。我使用JWT 包进行身份验证。路由定义如下:// route/api.phpRoute::middleware('auth:api')->group(function () {     Route::apiResources([        'genders' => 'API\GenderController'    ]);});在控制器内部,我有 5 个功能index、store、和。showupdatedestroy在这些函数中运行任何代码之前,我需要为当前用户设置语言环境,如下所示:public function index(){     $locale = request()->user()->lang;         app()->setLocale($locale);     // Rest of the function}我的控制器类扩展了一个BaseController类。由于 Restful API 是无状态的,我需要在每次用户发送 API 请求时设置语言环境。现在的问题是,最好的地方在哪里,我该怎么做?我试图在 BaseController 的构造函数中执行此操作,但似乎middleware('auth:api')尚未检查构造函数中的令牌。另一个选项是在身份验证事件处理程序中设置语言环境。我在这里找到了 JWT 包事件列表:// fired when the token could not be found in the requestEvent::listen('tymon.jwt.absent');// fired when the token has expiredEvent::listen('tymon.jwt.expired');// fired when the token is found to be invalidEvent::listen('tymon.jwt.invalid');// fired if the user could not be found (shouldn't really happen)Event::listen('tymon.jwt.user_not_found');// fired when the token is valid (User is passed along with event)Event::listen('tymon.jwt.valid');如果有人可以帮助我为我定义一个处理程序,tymon.jwt.valid我将不胜感激。或者即使您有其他解决方案可以在执行index、store、show和函数update之前运行事件。destroy
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我可以找到一种不同的方式来访问构造函数类中的当前用户。虽然request()->user()代码在构造函数中返回 null,auth()->user()但即使在构造函数中也返回当前用户。


abstract class BaseController extends Controller

{

    public function __construct() 

    {

        $locale = auth()->user()->lang;

        app()->setLocale($locale);

    }

}

因此,我可以在BaseController课堂上设置语言环境。


但是,我关于使用 JWT 事件的问题是开放的。另外,我想了解更多有关使用中间件的详细信息,正如@patryk-karczmarczyk 在他的回答中所建议的那样。


查看完整回答
反对 回复 2022-07-09
?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以在中间件中轻松完成。只需将验证用户身份的中间件放在设置位置的中间件之前。


创建您的路线类并在其中注册App\Http\Kernel::$routeMiddleware


然后像这样使用它:


// rouite/api.php


Route::group(['middleware' => ['auth:api', 'locale']], function () {

    Route::apiResources([

        'genders' => 'API\GenderController'

    ]);

});


查看完整回答
反对 回复 2022-07-09
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信