【问题标题】:How to get multi-auth on Laravel Passport to work?如何让 Laravel Passport 上的多重身份验证工作?
【发布时间】:2019-12-14 07:17:45
【问题描述】:

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

的答案

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

【问题讨论】:

标签: laravel laravel-passport laravel-authorization laravel-authentication laravel-admin


【解决方案1】:

你有很多方法来做管理员,你可以在用户表中设置一个属性“is_admin”或者可以为管理员创建一个新表[我认为它更安全]。

为管理员创建身份验证

config\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

【讨论】:

  • 您好,谢谢您的回复。我已经在我的管理表中添加了一个管理员,但是当我尝试登录时,它说找不到管理员。知道我在做什么错吗?这是我的 api.php 代码: Route::post('/login', 'AuthController@login'); Route::post('/login', 'AdminController@login');
  • @Max 你能用你的控制器和你的桌子更新吗?迁移后不要忘记使用php artisan passport:install
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 2020-12-30
  • 2017-05-13
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
相关资源
最近更新 更多