Laravel Passport客户端的user_id为null

时间:2019-02-27 10:39:51

标签: laravel laravel-passport

我正在制作一个使用laravel护照后端从数据库获取和发布数据的React应用。我可以完全控制应用程序代码和laravel后端代码。

我可以使用客户端,也可以简单地通过发布用户来创建访问令牌,但是我不能使用此访问令牌来访问数据,如here所述。使用生成的访问令牌发送这样的请求,每次都会给我401。

我相信我的问题在于结交客户时。我有2个客户端(运行php artisanpassport:install时取得),但是它们都有user_id = null。我假设当用户使用客户端(例如,发出访问令牌)时,应将此整数设置为整​​数?但是,不是。

那么,有人知道我在做什么错吗?

下面,我要发布用户模型以及迁移文件用户和oath_clients。如果需要,请随时请求更多代码!

用户模型:

class User extends Authenticatable
{
use HasApiTokens, Notifiable;

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

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];     
}

用户迁移:

class CreateUsersTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('api_token', 60)->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('users');
}
}    

Oauth迁移

class CreateOauthClientsTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('oauth_clients', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->index()->nullable();
        $table->string('name');
        $table->string('secret', 100);
        $table->text('redirect');
        $table->boolean('personal_access_client');
        $table->boolean('password_client');
        $table->boolean('revoked');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('oauth_clients');
}
}

2 个答案:

答案 0 :(得分:1)

听起来像我,您需要引用用户hasOne OAuth和OAuth belongsTo用户的关系。将此添加到您的oauth_clients迁移中:

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('user');

https://laravel.com/docs/5.7/migrations#foreign-key-constraints

然后在模型中包括必要的关系。希望这会有所帮助!

// User's Table
public function oauth()
{
    return $this->hasOne(OAuth::class, 'user_id');
}

// OAuth Table
public function user()
{
    return $this->belongsTo(User::class, 'user_id');
}

答案 1 :(得分:0)

这是Qauth迁移,其中user_id可以为空

$table->integer('user_id')->index()->nullable();

当您使用uuid添加客户端时将其传递给它,或者将其设置为增量。