例如,我在这个网站上看到了一个关于如何向 Laravel Passport 添加多重身份验证的答案https://stackoverflow.com/a/49449524/5029058
但我不明白用户如何成为该答案的管理员?is_admin 在数据库中是否有额外的一行?或者有没有给管理员的整张桌子?它在哪里尝试获取此信息以查看哪个用户是管理员并且将被允许对 api 进行某些调用?
例如,我在这个网站上看到了一个关于如何向 Laravel Passport 添加多重身份验证的答案https://stackoverflow.com/a/49449524/5029058
但我不明白用户如何成为该答案的管理员?is_admin 在数据库中是否有额外的一行?或者有没有给管理员的整张桌子?它在哪里尝试获取此信息以查看哪个用户是管理员并且将被允许对 api 进行某些调用?
你有很多方法来做管理员,你可以在用户表中设置一个属性“is_admin”,或者可以为管理员创建一个新表[我认为它更安全]。
创建对管理员的身份验证
配置\auth.php
'guards' => [
/* ... */
// ** News guard **
'admin' => [
'driver' => 'passport',
'provider' => 'admins',
],
],
'providers' => [
/* ... */
// ** News provider **
'admins' => [
'driver' => 'eloquent',
'model' => App\Administrator::class,
],
],
'passwords' => [
// ** News resettings **
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
管理员模型
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\SoftDeletes;
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');
要更改您的结果和未经过身份验证的管理员,请转到app\Http\Middleware\RedirectIfAuthenticated