如何在拉拉维尔护照上获得多身份验证才能工作?



例如,我在这个网站上看到了一个关于如何将多身份验证添加到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

相关内容

最新更新