有使用过sanctum的佬,能指点下吗,遇到些问题

1. 运行环境

php7.4

1). 当前使用的 Laravel 版本?

Laravel8.5 、 “laravel/sanctum”: “^2.15”,
//: <> (使用 php artisan --version 命令查看)

2. 问题描述?

在使用sanctum验证的时候,前面的步骤都没有问题,到中间件的时候就报错了,但是之前不是执行迁移文件生成了personal_access_tokens表么,然后token也是在这里面生成的,但为什么会使用到users 的 api_token呢。这个问题我翻遍了都没找到解决办法,希望有大佬遇到了能指点一下

 Column not found: 1054 Unknown column 'api_token' in 'where clause' (SQL: select * from `users` where `api_token` = 2|sorDwRX1gkHn6Ks8dOdJrJ4yrmYl3EFvP9fFxNvI

3. 部分代码截图

Http/Kernel

Laravel

routes/api

Route::prefix('/standard')->middleware('auth:sanctum')->group

config\Sanctum

<?php

use Laravel\Sanctum\Sanctum;

return [
    'stateful' => "*",
    'guard' => ['api'],
    'expiration' => null,
    'middleware' => [
        'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
        'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
    ],

];

config\auth

<?php

return [
    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],
     'password_timeout' => 10800,

];
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13

没有用过这个token,但是应该也需要在config的auth.providers里面配置sanctum的模型指向吧

5个月前 评论
Laravel_Panda (楼主) 5个月前
小猪蹄子 (作者) 5个月前

图里面的 auth:sanctum 不需要加

5个月前 评论
Laravel_Panda (楼主) 5个月前

那就加上字段,该说是跟用户关联的token

5个月前 评论
Laravel_Panda (楼主) 5个月前
deatil (作者) 5个月前
Laravel_Panda (楼主) 5个月前

我是这样设置的

'guards' => [
        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
        ],
        'backend' => [
            'driver' => 'sanctum',
            'provider' => 'admins',
        ],
    ],
5个月前 评论

api_token是auth的token认证默认字段,在AuthManager的createTokenDriver定义的

//创建一个TokenGuard实例对象
        $guard = new TokenGuard(
            //参数1:创建一个用户Provider提供者
            $this->createUserProvider($config['provider'] ?? null),
            $this->app['request'],
            $config['input_key'] ?? 'api_token',
            $config['storage_key'] ?? 'api_token',
            $config['hash'] ?? false
        );

如果不想用这个字段,可以在你的auth配置文件api里加上一个storage_key的配置,例如你数据库里的字段是token,'storage_key' => 'token'

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!