Laravel 5 具有多个表的Laravel 5 JWT令牌

Laravel 5 具有多个表的Laravel 5 JWT令牌,laravel-5,jwt,Laravel 5,Jwt,我有一个Laravel5后端,它将jwt令牌作为json响应发送(使用)。用户身份验证工作正常 我需要做的是使用jwt令牌进行管理员身份验证。管理员位于名为admin的不同表上 如何为不同的表使用jwt令牌?目前,该软件包不支持对应用程序用户进行多表身份验证 例如,您可以做的是: 为需要admin table与jwt auth协同工作的路由创建中间件 在这种情况下,中间件将配置更改应用于jwt,并在身份验证或使用jwt令牌之前更改模型 首选解决方案: 您可以在这里看到,对于这个没有连接到任何配置

我有一个Laravel5后端,它将jwt令牌作为json响应发送(使用)。用户身份验证工作正常

我需要做的是使用jwt令牌进行管理员身份验证。管理员位于名为admin的不同表上


如何为不同的表使用jwt令牌?

目前,该软件包不支持对应用程序用户进行多表身份验证

例如,您可以做的是:

  • 为需要admin table与jwt auth协同工作的路由创建中间件

  • 在这种情况下,中间件将配置更改应用于jwt,并在身份验证或使用jwt令牌之前更改模型

  • 首选解决方案:

    您可以在这里看到,对于这个没有连接到任何配置的包,它只是一个与JWT一起工作的包装器

    它是一个用于编码和解码JWT的库。你有你的手自由做你想做的事情,而且你可以为每个令牌设置你的密钥。在你的情况下,我会用这个

    创建包装器或存储库来处理身份验证,如尝试、检查等,并将它们包装在此包中

    希望这将帮助您制定自己的解决方案


    干杯。

    我遇到了类似的问题,对我来说,创建路由中间件并更新auth.model就足够了(只需将\App\User更改为\App\Customer):


    表和其他应该在模型中定义的db内容,所以上面的条目应该有用。

    它对我有用,我有两个用户客户和沙龙所有者。要更改,我更新了auth.model和jwt.user两件事:

    Config::set('jwt.user', 'App\Salon_owner'); 
    Config::set('auth.providers.users.model', \App\SalonOwner::class);
    

    这对我有用。你可以使用它们

    public function userLogin(Request $request){
            Config::set('jwt.user', 'App\User'); 
            Config::set('auth.providers.users.model', \App\User::class);
            $credentials = $request->only('email', 'password');
            $token = null;
            try {
                if (!$token = JWTAuth::attempt($credentials)) {
                    return response()->json([
                        'response' => 'error',
                        'message' => 'invalid_email_or_password',
                    ]);
                }
            } catch (JWTAuthException $e) {
                return response()->json([
                    'response' => 'error',
                    'message' => 'failed_to_create_token',
                ]);
            }
            return response()->json([
                'response' => 'success',
                'result' => [
                    'token' => $token,
                    'message' => 'I am front user',
                ],
            ]);
        }
    
        public function adminLogin(Request $request){
            Config::set('jwt.user', 'App\Admin'); 
            Config::set('auth.providers.users.model', \App\Admin::class);
            $credentials = $request->only('email', 'password');
            $token = null;
            try {
                if (!$token = JWTAuth::attempt($credentials)) {
                    return response()->json([
                        'response' => 'error',
                        'message' => 'invalid_email_or_password',
                    ]);
                }
            } catch (JWTAuthException $e) {
                return response()->json([
                    'response' => 'error',
                    'message' => 'failed_to_create_token',
                ]);
            }
            return response()->json([
                'response' => 'success',
                'result' => [
                    'token' => $token,
                    'message' => 'I am Admin user',
                ],
            ]);
        }
    

    无需更改
    config/auth.php
    中的提供程序

    您可以按如下方式更改每个控制器中的
    \u构造
    函数。以便jwt知道要验证哪个模型

    AdminController

    function __construct()
    {
        Config::set('jwt.user', Admin::class);
        Config::set('auth.providers', ['users' => [
                'driver' => 'eloquent',
                'model' => Admin::class,
            ]]);
    }
    

    这个问题有什么答案吗?@user3428228你解决了这个问题吗?到目前为止,我找到的最简单的解决方案是Across,我找到了这个解决方案,但需要在这里解释一下什么是
    JWTAuthException
    以及在
    config/auth.php
    身份验证默认值应该是什么样子like@YousefAltafJWTAuthException来处理错误“=>”令牌\u无效“&&”错误“=>”令牌\u过期身份验证默认值与jwt通过api用于身份验证的web auth(使用php artisan make:auth时)有关。感谢重播,我确实完成了此解决方案,但仍然面临此问题。请查看此问题并告诉我您的想法。
    
    function __construct()
    {
        Config::set('jwt.user', Admin::class);
        Config::set('auth.providers', ['users' => [
                'driver' => 'eloquent',
                'model' => Admin::class,
            ]]);
    }