Laravel 5.8 新用户注册时无法生成 api_token

Posted

技术标签:

【中文标题】Laravel 5.8 新用户注册时无法生成 api_token【英文标题】:Laravel 5.8 cannot generate api_token when new user register 【发布时间】:2019-08-31 03:44:52 【问题描述】:

我正在玩 Laravel 身份验证。

在使用 Composer 新创建的 Laravel 应用程序上,我一直按照说明进行操作(包括在内)

https://laravel.com/docs/5.8/api-authentication#generating-tokens

但是,当我注册新用户时,api_token 字段为 NULL。

我还需要做什么才能在用户注册时开始生成 api 令牌??

在RegisterController中创建方法:

protected function create(array $data)

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'api_token' => Str::random(60),
    ]);

迁移(我称之为Token)更新用户表:

class Token extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::table('users', function (Blueprint $table) 
            $table->string('api_token', 80)->after('password')
            ->unique()
            ->nullable()
            ->default(null);
        );
    

应用\用户模型:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable

    use 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',
    ];

【问题讨论】:

你能告诉我们你的用户模型吗?我的猜测是 api_token 不是您的protected $fillables 的一部分。 当然。在这里你进入编辑。用户模型与最初的脚手架没有任何关系 【参考方案1】:

创建迁移后,运行the migrate Artisan 命令:

php artisan migrate

如果你使用Homestead virtual machine,你应该在你的虚拟机中运行这个命令:

php artisan migrate --force

【讨论】:

【参考方案2】:

在您的用户模型中,将“api_token”添加到您的可填充项中

class User extends Authenticatable

    use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 
    'email', 
    'password', 
    'api_token'
];

【讨论】:

工作。 “remember_token”字段呢?我也应该包含在可填充项中吗? 我认为您不必添加它,因为 laravel 已经处理了它。您在初始设置之后添加的要修改的任何字段都应添加到模型$fillble 属性中。 @RicardoVigatti 应该是,但 Taylor 喜欢关闭 PRs

以上是关于Laravel 5.8 新用户注册时无法生成 api_token的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8 JWT API 仅在用户状态为活动时登录用户

Summernote 所见即所得编辑器无法使用 Laravel 5.8 正确呈现数据

Laravel 5.8 npm run dev 生成 ENOENT 错误

Vue.js 不适用于新的 Laravel 5.8 项目

同时认证带来的Laravel 5.8会话混乱

Laravel 5.8 - 时区环境变量