当前位置: 首页 > 知识库问答 >
问题:

Laravel Passport客户端的user_id为空

晋俊贤
2023-03-14

我正在制作一个反应应用程序,它使用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个答案

狄旭
2023-03-14

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

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

要么在添加客户端时使用例如 uuid 传递此内容,要么将其设置为增量。

甘永春
2023-03-14

在我看来,您需要引用用户<code>拥有一个</code>OAuth和一个OAuth<code>属于</code<用户的关系。将此添加到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');
}
 类似资料:
  • Git 为开发者提供了如此优秀的体验,许多人已经找到了在他们的工作站上使用 Git 的方法,即使他们团队其余的人使用的是完全不同的 VCS。 有许多这种可用的适配器,它们被叫做 “桥接”。 下面我们将要介绍几个很可能会在实际中用到的桥接。 Git 与 Subversion 很大一部分开源项目与相当多的企业项目使用 Subversion 来管理它们的源代码。 而且在大多数时间里,它已经是开源项目VC

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • URI 方法 URI() string 返回当前客户端使用的服务器地址。 SetURI 方法 SetURI(uri string) 设置当前客户端使用的服务器地址。如果你想要设置多个服务器地址,请使用 SetURIList 方法代替该方法。 URIList 方法 URIList() []string 返回当前客户端可使用的服务器地址列表。 SetURIList 方法 SetURIList(uriL

  • 客户端事件通过 SetEvent 方法进行设置。 客户端事件有两个,它们分别定义为: type onErrorEvent interface { OnError(name string, err error) }   type onFailswitchEvent interface { OnFailswitch(Client) } 因为 go 语言不需要显式实现接口的特点,所以这两

  • 创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string

  • 我正在使用Camel开发客户端/服务器请求/回复系统。 客户机和服务器使用两个JMS队列进行通信:请求队列和响应队列。 服务器端有一个camel路由,它使用来自请求队列的JMS消息并同时处理消息。使用响应队列将响应发送回客户端。 客户端向JMS队列发送消息并等待响应。我有两个问题: > 客户端实际上是其他应用程序将使用的库。我也想在客户端使用Camel,但不知道如何将Camel用作“函数”,即在我