为 JWTAuth 身份验证 Laravel 5.5 指定除默认值之外的其他守卫/提供者

Posted

技术标签:

【中文标题】为 JWTAuth 身份验证 Laravel 5.5 指定除默认值之外的其他守卫/提供者【英文标题】:Specify other guard/provider than default one for JWTAuth authentication Laravel 5.5 【发布时间】:2018-07-25 06:06:03 【问题描述】:

https://github.com/tymondesigns/jwt-auth 非常适合为默认保护验证用户,但我想从另一个表登录用户 (auth:guard)

这里是 config/auth.php:

'defaults' => [
        'guard' => 'user',
        'passwords' => 'users',
    ],

 'guards' => [
        'user' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
        'student' => [
            'driver' => 'jwt',
            'provider' => 'students',
        ],
        'father' => [
            'driver' => 'jwt',
            'provider' => 'fathers',
        ],
        'mother' => [
            'driver' => 'jwt',
            'provider' => 'mothers',
        ],
    ],

正如我所提到的,jwt 身份验证适用于 'guard' => 'user',因为它是默认身份验证,但我想使用 'guard' => 'student' 对学生进行身份验证而不更改默认保护。

这是我的登录功能:

public function login(Request $request)
        $credentials = $request->only('email', 'password');
        $jwt = '';
        try 
            if (!$jwt = JWTAuth::attempt($credentials)) 
                return response()->json([
                    'response' => 'error',
                    'message' => 'invalid_credentials',
                ], 401);
            
         catch (JWTAuthException $e) 
            return response()->json([
                'response' => 'error',
                'message' => 'failed_to_create_token',
            ], 500);
        
        return response()->json([
            'message' => 'success',
            'result' => ['token' => $jwt]
        ]);
    

为了更好地理解,我已按照文档中显示的所有步骤安装 tymon/jwt-auth 版本 dev-develop。 任何帮助都非常感谢

【问题讨论】:

你找到解决办法了吗? 是的。这个函数 auth()->shouldUse('father');但我找不到我想要的东西 【参考方案1】:

config/auth.php 中的提供者无需更改。

您可以在每个控制器中更改__construct 函数,如下所示。以便 jwt 知道要验证哪个模型。

父亲控制器

function __construct()

    Config::set('jwt.user', Father::class);
    Config::set('auth.providers', ['users' => [
            'driver' => 'eloquent',
            'model' => Father::class,
        ]]);

StudentController

function __construct()

    Config::set('jwt.user', Student::class);
    Config::set('auth.providers', ['users' => [
            'driver' => 'eloquent',
            'model' => Student::class,
        ]]);

【讨论】:

【参考方案2】:

试试这样的

 public function login(Request $request)


    //validate the user credentials 


$this->validate($request,[
      'email'=>'required | email',
      'password'=>'required',
]);

 //attempt to log in the admin

if(Auth::guard('student')->attempt(['email'=>$request->email,
'password'=>$request->password],$request->remember))

//if successful, then redirect to their intended location 

return redirect()->intended(route('dashboard'));



    

    // if unsuccessful, then redirect them back to the login form with form data

    return redirect()->back()->withInput($request->only('email','remember'));

【讨论】:

无论如何感谢您的回答。但这不是我想在我的项目中使用的。我需要使用 Api 身份验证,这不像守卫身份验证那么简单。在我的项目中,我使用了 JWTAuthentication 但找不到多用户的任何来源。

以上是关于为 JWTAuth 身份验证 Laravel 5.5 指定除默认值之外的其他守卫/提供者的主要内容,如果未能解决你的问题,请参考以下文章

laravel jwtAuth 验证凭据

Laravel 5.7 + Spatie 权限 + JWT 身份验证

使用 laravel 5.1 和 jwt 使用 cookie 进行身份验证

Laravel JWT 身份验证

Laravel JWT 身份验证返回 False

Lumen Jwt 身份验证获取(参数 2 传递给 Tymon\JWTAuth\JWTGuard)错误