我正在尝试让多用户系统工作,用户可以通过普通的门户网站登录,但是单独的实体数据库(例如,名为“机器人”)也可以通过API保护令牌驱动程序登录。但无论我做什么,我的设置都不是将我的身份验证后卫指向正确的机器人数据库,并不断尝试通过令牌验证这些请求(由于用户没有令牌,因此失败)。
有人可以帮我找到我出错的地方吗?
我首先在Kernel.php中组建了一个中间件组:
'api' => [
'throttle:60,1',
'auth:api',
],
这使用config / auth.php中的设置
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'robots',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'robots' => [
'driver' => 'eloquent',
'model' => App\Models\Robot::class,
],
],
在routes.php中调用中间件
Route::group(['middleware' => 'api'], function () {
Route::get('api/request', 'API\RequestController@index');
});
它使用这个模型:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable;
class Robots extends Authenticatable
{
protected $fillable = [
'serial_number','api_token',
];
protected $guard = 'Robots';
protected $hidden = [
'api_token',
];
}
有什么想法吗?
更新:进一步检查时,似乎auth.php中的大多数设置都没有正确应用 - 是否有某种方法可以强制这些设置生效?
答案 0 :(得分:4)
实际问题/解决方案:
Laravel有一个独立的,很少提到的缓存,专门用于其配置文件。正常的缓存和类重置方法(如 <?php echo __DIR__ . '/' . $recent1["Image"];?>
和composer dump-autoload
)不会影响此缓存,这导致我的auth.php文件中的任何设置都没有生效的混乱状态。
清除此缓存的正确方法是使用命令:
php artisan cache:clear
php artisan config:cache
这些解决了我的问题。
答案 1 :(得分:3)
在config / auth.php中,指定要用于机器人提供程序的提供的模型:'model' => App\Models\Robot::class
但是,您的Robot类定义为class Robots extends Authenticatable
,这是类名的不匹配。< / p>
将您的课程重命名为class Robot