2

例如,我在这个网站上看到了一个关于如何向 Laravel Passport 添加多重身份验证的答案https://stackoverflow.com/a/49449524/5029058

但我不明白用户如何成为该答案的管理员?is_admin 在数据库中是否有额外的一行?或者有没有给管理员的整张桌子?它在哪里尝试获取此信息以查看哪个用户是管理员并且将被允许对 api 进行某些调用?

4

1 回答 1

1

你有很多方法来做管理员,你可以在用户表中设置一个属性“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

于 2019-08-06T17:48:06.580 回答