jwt - Laravel 8 多用户认证 JWT
问题描述
我必须为“用户”和“管理员”建模。'User' 是 Laravel 中的默认模型。我想分别验证这些模型。
class Admin extends Authenticatable implements JWTSubject
{
use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'email',
'name',
'contact',
'password'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
}
在 auth.php 中,
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
'hash' => false,
],
'admins' => [
'driver' => 'jwt',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'jwt',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
],
在 AdminController.php 中,
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:admins');
}
public function register(Request $request){
$creds = [
'email' => $request->input('email'),
'name' => $request->input('name'),
'password' => bcrypt($request->input('password')),
'contact' => $request->input('contact'),
];
try {
$admin = Admin::create($creds);
} catch (\Throwable $th) {
return response(
[
'message' => $th,
'success' => false
],
);
}
event(new Registered($admin));
$token = JWTAuth::fromUser($admin);
return response(
[
'user' => $admin,
'message' => 'register success',
'token' => $token,
'success' => true
],
201
);
}
public function login(Request $request){
$creds = [
'email' => $request->input('email'),
'password' => $request->input('password')
];
if(!Auth()->attempt($creds)){
return response([
'message' => 'login faild!',
'success' => false
]);
}
$admin = Auth()->user();
$token = JWTAuth::fromUser($admin);
return response(
[
'user' => $admin,
'token' => $token,
'success' => true
],
201
);
}
你能帮助我吗?我不知道如何正确使用注册和登录功能。你能解释一下这些函数中发生了什么吗?如何正确使用中间件?
解决方案
推荐阅读
- pymc3 - 如何使用 pymc3 对分类效果建模
- html - 如何在 CSS 中创建编号标记?
- python - 我对 Selenium NoSuchElementException (Python) 有疑问
- c# - CORS没有成功?我怎样才能防止这种情况?
- flutter - 如何在颤动中序列化/存储路径对象
- django - 如何在 Django 中实现中央身份验证服务器?
- python - 如何将复选框设置为 Treeview 列的中心?
- postgresql - POSTGRESQL SUM 子查询 Sylob 5
- java - 从 Java 有效负载中解密 PHP 中的 AES/GCM/PKCS5Padding
- java - 有时(无法在测试中重现)提交根本不会发生在 Kafka Reactor 中