【问题标题】:laravel airlock issue with creating tokens: 'tokenable_id' cannot be null创建令牌的 laravel 气闸问题:'tokenable_id' 不能为空
【发布时间】:2020-03-06 20:28:58
【问题描述】:

已升级到 Laravel 7 并已安装 Laravel/Airlock。

如果尝试创建令牌,按照安装说明操作会出错

SQLSTATE[23000]:完整性约束违规:1048 列“tokenable_id”不能为空(SQL:插入personal_access_tokens(name,token,abilities,tokenable_id,tokenable_type,@ 987654327@, created_at) 值 (api-token, 31afd4da089878bd2cd562264bd2d8c789c7a1f91e47f6c3969bce2fc19a7329, ["order:create","order:view","WLR3:check_availability"], ?, App\Models\User 20:20-0, 2020-03-06 44:05 10:44:05))

在我的 TokenController.php 中有:

public function create(User $user, Request $request)
{
    $token_name = $request->input('token_name', 'api-token');

    $abilities = $request->input('abilities', [
        'order:create',
        'order:view',
        'WLR3:check_availability'
    ]);

    $token = $user->createToken($token_name, $abilities);

    return $this->view($user, $request);
}

我错过了什么可能导致此错误?

在用户模型上,它以:

use Laravel\Airlock\HasApiTokens;

class User extends Authenticatable /* implements MustVerifyEmail */
{
    use HasRoles, HasApiTokens, Notifiable;

    protected $guard_name = 'web';

【问题讨论】:

    标签: laravel laravel-airlock


    【解决方案1】:

    菜鸟的错误……看来依赖注入创建的$user不是一个有效的。

    我需要补充:

    $user = Auth::user();
    

    到 create 方法,所以它现在读作:

    public function create(Request $request)
        {
            $user = Auth::user();
    
            $token_name = $request->input('token_name', 'api-token');
    
            $abilities = $request->input('abilities', [
                'order:create',
                'order:view',
                'WLR3:check_availability'
            ]);
    
            $token = $user->createToken($token_name, $abilities);
    
            return $this->view($user, $request);
        }
    

    现在可以了!

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2020-09-21
      • 2020-07-26
      • 2018-04-13
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      相关资源
      最近更新 更多