• 解决 Laravel JWT 多表认证时获取不到当前认证用户的问题


    解决 Laravel JWT 多表认证时获取不到当前认证用户的问题

    4Ark 创建于1年前, 最后更新于 1年前   版本号 #1   2987 views   1 likes   

    问题描述

    最近在做一个项目,需要多表认证,分别为adminuser表,我采用的JWT认证方式,但今天遇到了一个问题:使用Auth::user()返回null,也就是说无法获得当前认证的用户。

    网上搜索后,并没有找到直接的解决方案,然后经过几次尝试居然误打误撞地解决了,所以特地记录下来,希望遇到同样问题的人不要再在这问题上耗费太多时间。

    注意:这里并不介绍JWT的工作原理和配置,如果想理解更多请参考以下文章:

    大致配置

    先讲一下我的配置。

    auth.php文件如下:

     
    return [
        'defaults' => [
            'guard' => env('AUTH_GUARD', 'admin'),
        ],
        'guards' => [
            'admin' => [
                'driver' => 'jwt',                           #### 更改为JWT驱动
                'provider' => 'admins',
            ],
            'user' => [
                'driver' => 'jwt',                           #### 更改为JWT驱动
                'provider' => 'users',
            ],
        ],
        'providers' => [
            'admins' => [
                'driver' => 'eloquent',
                'model'  => AppAdmin::class,        #### 指定用于token验证的模型类
            ],
            'users' => [
                'driver' => 'eloquent',
                'model'  => AppUser::class,        #### 指定用于token验证的模型类
            ],
        ],
        'passwords' => [
            //
        ],
    ];

    问题的根源

    auth.php中,我们有两个guard,而默认的guard指向的是admin,这时候如果是user经过的验证的话,是无法通过Auth::user()获取到当前认证用户信息的。

    解决方法

    解决方法很简单,只要使用Auth::guard('user')指明使用哪个guard即可,这里我是通过公用的控制器中的一个方法:

     
    public function getAuthUser($guard = 'admin'){
        return Auth::guard($guard)->user();
    }

    感谢观看!

  • 相关阅读:
    Entity Framework框架 (一)
    webAPI的常用操作
    图片添加水印和生成验证码
    ASP.NET中Page_Load()与Page_Init()的区别
    session常用操作
    非递归解决组合问题
    TemplateDoesNotExist 异常
    [android]不解锁刷机
    论记忆化搜索
    flex builder 4
  • 原文地址:https://www.cnblogs.com/aipiaoborensheng/p/12787903.html
Copyright © 2020-2023  润新知