【发布时间】:2016-09-22 10:24:44
【问题描述】:
我正在尝试让多身份验证系统正常工作,用户可以通过普通 Web 门户登录,但单独的实体数据库(例如名为“机器人”)也可以通过 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 中的大多数设置都没有正确应用 - 有什么方法可以强制这些设置生效吗?
【问题讨论】:
-
使用网络服务?
-
什么意思?我没有使用网络中间件,因为这会引发 API 调用的令牌异常。
-
如果使用 API 则在标头上传递 api_token
-
对,这就是我想做的。但是,当我在标头中传递 API 令牌时,它会尝试使用用户提供程序而不是机器人提供程序进行身份验证,因为用户在他们的表中没有 API 令牌列。就好像它完全忽略了 config/auth.php 文件一样。
-
在 App\Models\Robot 表上添加字段 api_token。
标签: php authentication laravel-5.2