Клиенты Laravel Passport имеют user_id null - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю приложение реагирования, которое использует паспорт laravel для получения и публикации данных из базы данных.У меня есть полный контроль над кодом приложения и кодом внутреннего интерфейса laravel.

Я могу просто создать токен доступа, используя клиент или просто выдав его пользователю, но не могу использовать этот токен доступа для доступа к данным, как описано здесь .Отправка такого запроса с помощью сгенерированного токена доступа дает мне каждый раз 401.

Я считаю, что моя проблема заключается в создании клиентов.У меня есть 2 клиента (сделанные при запуске php artisan passport: install), но у них обоих user_id = null.Я предполагаю, что это должно быть установлено некоторое целое число, когда пользователь использует клиент, например, для выдачи токена доступа?Но это не так.

Итак, кто-нибудь имеет представление о том, что я делаю неправильно?

Ниже я публикую свою пользовательскую модель, а также файлы миграции users и 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 голосов
/ 27 февраля 2019

Похоже, мне нужно сослаться на отношения, которые Пользователь 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');
}
0 голосов
/ 27 февраля 2019

Это миграция Qauth, где user_id может быть нулевым

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

, либо вы пропускаете это при добавлении клиентов, используя, например, uuid, либо устанавливаете это как приращение.

...