带有API保护的Laravel 5.2 Multi-Auth使用了错误的表

时间:2016-05-25 01:50:18

标签: php authentication laravel-5.2

我正在尝试让多用户系统工作,用户可以通过普通的门户网站登录,但是单独的实体数据库(例如,名为“机器人”)也可以通过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中的大多数设置都没有正确应用 - 是否有某种方法可以强制这些设置生效?

2 个答案:

答案 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