Tôi đang cố gắng để có được một hệ thống multi-auth làm việc, nơi người dùng có thể đăng nhập thông qua cổng web thông thường, nhưng một cơ sở dữ liệu riêng biệt của thực thể (tên là "robot" ví dụ) cũng có thể đăng nhập thông qua trình điều khiển mã thông báo API bảo vệ. Nhưng dù tôi có làm gì đi chăng nữa, thiết lập mà tôi có không hướng dẫn bảo vệ xác thực của tôi đến cơ sở dữ liệu Robot chính xác và cố gắng xác thực các yêu cầu này như Người dùng thông qua mã thông báo (không thành công, vì người dùng không có mã thông báo).Laravel 5.2 Multi-Auth với API guard sử dụng sai bảng
Ai đó có thể giúp tôi tìm thấy nơi tôi đã đi sai?
Tôi đã bắt đầu bằng cách ghép một nhóm trung gian trong Kernel.php:
'api' => [
'throttle:60,1',
'auth:api',
],
này sử dụng cài đặt trong 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,
],
],
Các middleware được gọi trong routes.php
Route::group(['middleware' => 'api'], function() {
Route::get('api/request', 'API\[email protected]');
});
Nó sử dụng mô hình này:
<?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',
];
}
Bất kỳ ý tưởng nào?
Cập nhật: để kiểm tra thêm, có vẻ như hầu hết các cài đặt trong auth.php không được áp dụng đúng cách - có cách nào để buộc các cài đặt này có hiệu lực không?
Sử dụng dịch vụ web? –
Ý của bạn là gì? Tôi không sử dụng phần mềm trung gian web, vì điều đó sẽ ném một ngoại lệ mã thông báo cho các cuộc gọi API. – Luciasar
nếu sử dụng API, sau đó vượt qua api_token trên tiêu đề –