Laravel 7 sanctum 数据库连接问题
Laravel 7 sanctum Database Connection Problem
我正在使用 Sanctum laravel 包为 API 制作项目。它需要连接2个数据库服务器。一个是 MySQL 来保存一些数据,包括登录用户。另一个是 SQL 服务器获取 API 路由的数据。在 MySQL 数据库服务器中登录 Sanctum 没有问题,我已经很好地测试了登录并取回了令牌。当我在不使用 Laravel Sanctum 的情况下检索数据时,从 SQL 服务器检索数据也运行良好。
我需要从 MySQL 数据库服务器登录检查并从 SQL 服务器数据库服务器检索数据。我现在面临的问题是如何以及在何处定义 MySQL 数据库服务器需要 Sanctum 身份验证中间件。
连接如下:
DB_MYSQL_CONNECTION=mysql
DB_MYSQL_HOST=127.0.0.1
DB_MYSQL_PORT=3306
DB_MYSQL_DATABASE=api
DB_MYSQL_USERNAME=root
DB_MYSQL_PASSWORD=
DB_SQLSRV_CONNECTION=sqlsrv
DB_SQLSRV_HOST=127.0.0.1
DB_SQLSRV_PORT=1433
DB_SQLSRV_DATABASE=StoreData
DB_SQLSRV_USERNAME=sa
DB_SQLSRV_PASSWORD=
那条路线
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/items', 'APIController@getAllItems');
});
我运行登录成功后用auth token,我得到如下错误:
Illuminate\Database\QueryException: SQLSTATE[42S02]: [Microsoft][ODBC
Driver 11 for SQL Server][SQL Server]Invalid object name
'personal_access_tokens'. (SQL: select top 1 * from
[personal_access_tokens] where [token] =
bd1de1df8bc2ac289dbd89f7d640a4c65ebc1b709b565ee500315ee710f12b62) in
file
...\vendor\laravel\framework\src\Illuminate\Database\Connection.php on
line 671
personal_access_tokens 和用户表在 MySQL 数据库中。
我可以为 Sanctum Auth 自定义哪个数据库连接吗?以及如何?
好吧,您需要对个人访问令牌进行一些自定义。创建一个名称为 SanctumPersonalAccessClient 的普通模型(在此示例中你想要什么)并在 AuthServiceProvider.php 中写这个
namespace App\Providers;
use Laravel\Sanctum\Sanctum;
use App\SanctumPersonalAccessClient as PersonalAccessClient;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
//
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Sanctum::usePersonalAccessClientModel(PersonalAccessClient::class);
}
}
然后在您刚刚创建的模型中设置连接和 table 名称,如下所示:
namespace App;
use Laravel\Sanctum\PersonalAccessClient;
class SanctumPersonalAccessClient extends PersonalAccessClient
{
protected $connection = 'my_custom_connection';
protected $table = 'personal_access_tokens';
}
有帮助link但有护照:https://github.com/laravel/passport/issues/247#issuecomment-424095961
我正在使用 Sanctum laravel 包为 API 制作项目。它需要连接2个数据库服务器。一个是 MySQL 来保存一些数据,包括登录用户。另一个是 SQL 服务器获取 API 路由的数据。在 MySQL 数据库服务器中登录 Sanctum 没有问题,我已经很好地测试了登录并取回了令牌。当我在不使用 Laravel Sanctum 的情况下检索数据时,从 SQL 服务器检索数据也运行良好。
我需要从 MySQL 数据库服务器登录检查并从 SQL 服务器数据库服务器检索数据。我现在面临的问题是如何以及在何处定义 MySQL 数据库服务器需要 Sanctum 身份验证中间件。
连接如下:
DB_MYSQL_CONNECTION=mysql
DB_MYSQL_HOST=127.0.0.1
DB_MYSQL_PORT=3306
DB_MYSQL_DATABASE=api
DB_MYSQL_USERNAME=root
DB_MYSQL_PASSWORD=
DB_SQLSRV_CONNECTION=sqlsrv
DB_SQLSRV_HOST=127.0.0.1
DB_SQLSRV_PORT=1433
DB_SQLSRV_DATABASE=StoreData
DB_SQLSRV_USERNAME=sa
DB_SQLSRV_PASSWORD=
那条路线
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/items', 'APIController@getAllItems');
});
我运行登录成功后用auth token,我得到如下错误:
Illuminate\Database\QueryException: SQLSTATE[42S02]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Invalid object name 'personal_access_tokens'. (SQL: select top 1 * from [personal_access_tokens] where [token] = bd1de1df8bc2ac289dbd89f7d640a4c65ebc1b709b565ee500315ee710f12b62) in file ...\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 671
personal_access_tokens 和用户表在 MySQL 数据库中。 我可以为 Sanctum Auth 自定义哪个数据库连接吗?以及如何?
好吧,您需要对个人访问令牌进行一些自定义。创建一个名称为 SanctumPersonalAccessClient 的普通模型(在此示例中你想要什么)并在 AuthServiceProvider.php 中写这个
namespace App\Providers;
use Laravel\Sanctum\Sanctum;
use App\SanctumPersonalAccessClient as PersonalAccessClient;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
//
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Sanctum::usePersonalAccessClientModel(PersonalAccessClient::class);
}
}
然后在您刚刚创建的模型中设置连接和 table 名称,如下所示:
namespace App;
use Laravel\Sanctum\PersonalAccessClient;
class SanctumPersonalAccessClient extends PersonalAccessClient
{
protected $connection = 'my_custom_connection';
protected $table = 'personal_access_tokens';
}
有帮助link但有护照:https://github.com/laravel/passport/issues/247#issuecomment-424095961