例如,我在这个网站上看到了一个关于如何将多身份验证添加到Laravel护照 https://stackoverflow.com/a/49449524/5029058 的答案
但是我不明白用户如何成为该答案中的管理员? 数据库中是否有额外的行is_admin?还是管理员有一整张表? 它在哪里尝试获取此信息以查看哪个用户是管理员并且将被允许对 API 进行某些调用?
你有很多方法可以做管理员,你可以在用户表中设置一个属性"is_admin",或者可以为管理员创建一个新表[我认为它更安全]。
创建对管理员的身份验证
配置\身份验证.php
'guards' => [
/* ... */
// ** News guard **
'admin' => [
'driver' => 'passport',
'provider' => 'admins',
],
],
'providers' => [
/* ... */
// ** News provider **
'admins' => [
'driver' => 'eloquent',
'model' => AppAdministrator::class,
],
],
'passwords' => [
// ** News resettings **
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
管理员模型
<?php
namespace App;
use LaravelPassportHasApiTokens;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateDatabaseEloquentSoftDeletes;
class Administrator extends Authenticatable
{
use HasApiTokens, Notifiable;
use SoftDeletes;
}
在控制器中创建此"AUTH"很容易
public function login()
{
$user = Administrator::where("email", request('email'))->first();
if(!isset($user)){
return "Admin Not found";
}
if (!Hash::check(request('password'), $user->password)) {
return "Incorrect password";
}
$tokenResult = $user->createToken('Admin');
$user->access_token = $tokenResult->accessToken;
$user->token_type = 'Bearer';
return $user;
}
要在路由中进行身份验证,只需添加中间件
Route::resource('admins', 'AdminController')->middleware('auth:admin');
要更改结果和未经身份验证的管理员,请转到appHttpMiddlewareRedirectIfAuthenticated