- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在让 Laravel Sanctum 授权两个独立数据库中的两个表时遇到了一些问题。
我正在使用 Laravel Sanctum token 进行授权。我有两个表来授权用户(用户和联系人)我设置了两个单独的保护,并且可以使用一个 token 表使所有内容在单个数据库上工作。
但是我想将联系人表放在一个单独的数据库中。这样做会创建两个personal_access_tokens 表,一个在Users 数据库中,另一个在Contacts 数据库中,我不介意。我可以很好地创建 token ,但是当我尝试使用 token 授权联系人时,Sanctum 正在尝试查看 Users personal_access_tokens 表,而不是 Contacts personal_access_tokens 表。所以本质上它只是查看个人_access_tokens 表的错误数据库,我不知道如何更改它。
我的设置如下:
卫兵:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
/*'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],*/
'users' => [
'driver' => 'sanctum',
'provider' => 'users',
'hash' => false,
],
'contacts' => [
'driver' => 'sanctum',
'provider' => 'contacts',
'hash' => false,
],
],
供应商
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'contacts' => [
'driver' => 'eloquent',
'model' => App\Models\Contact::class,
],
],
用户模型
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
联系方式
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class Contact extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The connection name for the model.
*
* @var string
*/
protected $connection = 'puranet_crm';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'first_name',
'last_name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
我的两个 api 路由是:
Route::group(['middleware' => 'auth:sanctum'], function() {
//All secure URL's
Route::get('test',[UserController::class, 'test']);
});
Route::group(['middleware' => 'auth:contacts'], function() {
Route::get('test-contacts',[ContactController::class, 'test']);
});
联系 Controller (这与 UserController 相同,但它引用的模型除外)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Contact;
use Illuminate\Support\Facades\Hash;
class ContactController extends Controller
{
/**
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
*/
public function login(Request $request)
{
$user = Contact::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response([
'message' => ['These credentials do not match our records.']
], 404);
}
$token = $user->createToken('contacts-app-token')->plainTextToken;
$response = [
'user' => $user,
'token' => $token
];
return response($response, 201);
}
/**
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
*/
public function test()
{
return response(["response" => "Test Contacts"], 201);
}
}
最佳答案
您需要覆盖项目中的 sanctum 模型并覆盖其中的 $connection 变量,这样您就可以连接到您想要连接的数据库,就像使用普通模型一样。您可以找到如何覆盖版本 8 的 Laravel 文档中的 sanctum 模型。
在您的项目之一中创建此模型以覆盖 sanctum 将在何处查找 token 。
class PersonalAccessToken extends SanctumPersonalAccessToken{
use HasFactory;
protected $connection = 'name of your connection in database.php';
}
因此,两个 sanctum 都将使用相同的数据库来验证用户。
关于php - Laravel Sanctum token - 两个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65141198/
我使用 Laravel Sanctum 设置了 SPA 身份验证,它工作正常。我用一个用户登录成功。在 Chrome Devtools 中,Application > Storage > Cookie
我有一个具有以下设置的应用程序: Laravel 主机:appname.local:8000 环境变量: SESSION_DRIVER=数据库 SESSION_LIFETIME=480 SESSION
我想知道检查用户是否仍在客户端登录的最佳做法是什么。 假设用户登录。如果成功,它将保存在状态中,如下所示: axios.post('/login').then(() => { this.state
我的 laravel 应用程序中有多个 guard : 代码 config/auth.php : 'defaults' => [ 'guard' => 'user', 'passwor
我在我的 Vue 项目中使用 laravel sanctum SPA 身份验证。一切运行良好,但即使在注销后 Auth::logout() 我仍然能够从中间件内的 api 路由获取数据 Route::
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 去年关闭。 Improve th
我在使用子域和 laravel sanctum 时遇到问题。在子域上,我未获得授权。它在本地工作得很好。 我已将域添加到 sanctum domain/.env。我还根据关于子域的 laravel 文
我是按照Laravel官方文档一步步来的。 当我向 {{host}}/api/login 发送请求时,我可以收到包含 token 的响应。一切都是正确的。 但是当我尝试向 {{host}}/api/u
我正在尝试将 Laravel Sanctum 用于我的 SPA。有一些来自 web.php 路由的基本主页,但其他 axios与 SPA 的 API 交互在 api.php 路由中,由 auth:sa
我正在用 laravel sanctum 进行测试,但这里有一些问题.. 我正在创建管理员守卫。 当我将中间件更改为 auth:sanctum_admin .. 它应该只能由管理员访问,但在这里我可以
我正在使用 laravel sanctum 并将中间件添加到我的 route : Route::group(['middleware' => 'auth:sanctum'], function ()
我正在尝试测试经过身份验证的 API 路由,该路由只有经过身份验证的用户才能发布到特定路由。 查看 Laravel Sanctum 文档,我可以使用下面的代码来创建和验证用户: Sanctum::ac
我在让 Laravel Sanctum 授权两个独立数据库中的两个表时遇到了一些问题。 我正在使用 Laravel Sanctum token 进行授权。我有两个表来授权用户(用户和联系人)我设置了两
我之前使用过 Laravel 的内置 api token 身份验证,但我想为不同的客户端提供多个 api token ,并且在 Laravel 7.x 中,我正在尝试迁移到 Laravel Sanct
我正在尝试在我的 laravel vue 应用程序中获取当前用户。每当我尝试获取它时,我都会收到此错误: Symfony\Component\Routing\Exception\RouteNotFou
我正在使用 Laravel sanctum 来验证我的 API,但我没有使用默认的 laravel 用户模型,我已经构建了一个模型来在另一个名为 Customer 的表中分隔我的 App 客户。为此,
我是 laravel 的新手,正在尝试使用 sanctum 为登录构建一个 api。 我遵循了文档和一些教程,但我遇到了一个错误,即即使使用 HasApiToken,我的用户类也无法访问 token
我怎样才能将 laravel sanctum csrf cookie 路由更改为 /api/sanctum/csrf-cookie ? 我尝试将其添加到 api.php 路由中: use Larave
当我跑 $user->currentAccessToken()->delete(); token 过期,Auth::check()变成 false ,这是预期的。 然而,当我去personal_acc
Laravel auth、Passport 和 Sanctum 之间有什么区别以及它们何时使用? 最佳答案 Passport 在几分钟内为您的 Laravel 应用程序提供了完整的 OAuth2 服务
我是一名优秀的程序员,十分优秀!