【问题标题】:How to detect Unavailability or Unauthenticated of Laravel Auth Sanctum Token for Mobile API如何检测 Laravel Auth Sanctum Token for Mobile API 不可用或未经身份验证
【发布时间】:2022-11-02 13:13:23
【问题描述】:

背景

所以我在 Laravel 中使用 auth:sanctumroutes/api.php 上创建了一个安全流程,用于像这样的移动 API:

Route::middleware('auth:sanctum')->group(function () {
    Route::get('profile', [UserController::class, 'profile']);
    Route::post('profile_update', [UserController::class, 'updateProfile']);
    Route::post('logout', [UserController::class, 'logout']);
});

我知道能够访问其中的 API,然后我需要一个 PersonalAccessToken,它可以像这样生成:

$user = M_CRM_CUSTOMER::where('indexs', $user_indexs)->first();
$tokenResult = $user->createToken($request->mobile)->plainTextToken;

这是代码将填充personal_access_tokens 表中记录的位置,该表在初始 Laravel 迁移中自动提供

Schema::create('personal_access_tokens', function (Blueprint $table) {
    $table->id();
    $table->morphs('tokenable');
    $table->string('name');
    $table->string('token', 64)->unique();
    $table->text('abilities')->nullable();
    $table->timestamp('last_used_at')->nullable();
    $table->timestamp('expires_at')->nullable();
    $table->timestamps();
});

案子

从技术上讲,只要 Token 在数据库中或只要它没有过期,那么我们就可以访问/使用它针对组中的 API,对吗?

如果您尝试使用 Postman 访问组中的 API,它将起作用。

现在,如果用户撤销令牌,使用:
$token = $request->user()->tokens()->delete();

然后,如果我们尝试使用 Postman 访问组中包含的 API,会导致以 HTML 代码的形式显示失败从 Laravel 登录页面。

也许对于网络用户来说,这很有帮助且可见,但对于移动 API 用户呢?
肯定会出错。

期望

我的意思是我怎么知道如果用户已通过身份验证或有一个使用 Sanctum 的 PersonalAccessToken? 这样我就可以创建一个简单的返回消息,以防用户未通过身份验证。

试试 1

可能是因为我使用的是auth:sanctum,所以我无法使用Laravel's manual authentification 来知道用户是否经过身份验证,如下所示:

if (Auth::attempt($credentials)) {
    // Do something if user is authenticated
}

它总是返回用户未通过身份验证,即使我已经像这样生成了 Sanctum 的令牌生成器:

$user->createToken($request->device_name)->plainTextToken;

试试 2

我也尝试过这样的检测:

if (!$request->user()->tokens()->where('tokenable_id', Auth::id())->first()) {
    return 'Not Authenticated';
} else {
    return 'Authenticated';
}

无论如何都会检测到令牌,但这是正确的方法吗?

开导我,或者我只是误解了这个概念并使用了 Auth Sanctum 的功能?
谢谢

【问题讨论】:

    标签: php laravel authentication laravel-sanctum


    【解决方案1】:

    原来我只需要通过将其设置为application/json的形式来显示错误返回表单,就像这样(如果您使用的是邮递员)

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2020-12-14
      • 2020-09-22
      • 2020-09-09
      • 2021-04-24
      • 2022-12-04
      • 2022-01-17
      • 2021-05-24
      • 2018-05-24
      相关资源
      最近更新 更多