为 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 5.7 + Spatie 权限 + JWT 身份验证