dad*_*jar 8 laravel laravel-passport
设置好护照后,我已经配置并创建了一个控制器,用于管理对一般外部邮寄请求的资源的“注册-登录--”访问。我不需要特定的客户。但是,当我尝试在注册或登录中创建令牌时:
$tokenObj=$user->createToken('APPLICATION')->accessToken;
Run Code Online (Sandbox Code Playgroud)
错误是:
RuntimeException:找不到个人访问客户端。请创建一个。在第94行堆栈C:\ xampp7.1 \ htdocs \ passport \ vendor \ laravel \ passport \ src \ ClientRepository.php中的堆栈跟踪:1. RuntimeException->()C:\ xampp7.1 \ htdocs \ passport \ vendor \ laravel \ passport \ src \ ClientRepository.php:94 2. Laravel \ Passport \ ClientRepository-> personalAccessClient()C:\ xampp7.1 \ htdocs \ passport \ vendor \ laravel \ passport \ src \ PersonalAccessTokenFactory.php:71
我该如何解决?
Rub*_*nce 26
对我来说,它通过运行解决了
php artisan passport:install
Run Code Online (Sandbox Code Playgroud)
因为它是在刷新数据库后发生的。
我应该打电话吗
php artisan passport:install
Run Code Online (Sandbox Code Playgroud)
每次我跑步
php artisan:migrate
Run Code Online (Sandbox Code Playgroud)
有办法正确地做到这一点吗?
运行命令后
php artisan passport:client --personal
Run Code Online (Sandbox Code Playgroud)
并给你这个提示
What should we name the personal access client? [Artisan Personal Access Client]:
Run Code Online (Sandbox Code Playgroud)
别担心,只需输入任何名称并按回车键即可。
有时会混淆用户模型的特征。
Sanctum 和 Passport 具有相同的特质,称为HasApiToken。
您可能需要更改用户模型中的命名空间:
从
use Laravel\Sanctum\HasApiTokens;
Run Code Online (Sandbox Code Playgroud)
到
use Laravel\Passport\HasApiTokens;
Run Code Online (Sandbox Code Playgroud)
在实现单元测试时,您可以创建一个测试来创建一个personal-access-client太:
如果您在数据库中散列您的秘密,如果您需要未散列的密码,则应该在测试用例中设置
Passport::$hashesClientSecrets为false
use RefreshDatabase
/** @test */
public function can_create_a_personal_access_client()
{
Passport::$hashesClientSecrets = false;
$this->artisan(
'passport:client',
['--name' => config('app.name'), '--personal' => null]
)->assertSuccessful();
$this->assertDatabaseCount(PersonalAccessClient::class,1);
}
Run Code Online (Sandbox Code Playgroud)
因为我们使用该RefreshDatabase特征,所以为可能需要的其他测试创建辅助特征非常有用personal-access-client:
<?php
namespace Tests;
use App\Models\User;
use Illuminate\Testing\TestResponse;
trait Helper
{
protected function createPersonalClient()
{
Passport::$hashesClientSecrets = false;
$this->artisan(
'passport:client',
['--name' => config('app.name'), '--personal' => null]
);
// use the query builder instead of the model, to retrieve the client secret
return DB::table('oauth_clients')
->where('personal_access_client','=',true)
->first();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将该类重新用于其他 PAT 测试:
use RefreshDatabase, Helper;
/** @test */
public function can_issue_a_personal_access_token()
{
$this->createPersonalClient();
$user = User::factory()->create()->createToken('test');
$this->assertInstanceOf(PersonalAccessTokenResult::class, $user);
$this->assertObjectHasAttribute('accessToken', $user);
$this->assertObjectHasAttribute('token', $user);
}
Run Code Online (Sandbox Code Playgroud)
除了namelivia的评论。正如Laravel博士所说:
在您的应用程序可以发布个人访问令牌之前,您将需要创建个人访问客户端。您可以使用带--personal选项的passport:client命令执行此操作。如果您已经运行passport:install命令,则无需运行此命令:
php artisan passport:client --personal
Run Code Online (Sandbox Code Playgroud)
但是,如果您没有运行命令:
php artisan passport:install
Run Code Online (Sandbox Code Playgroud)
您应该先运行它。
| 归档时间: |
|
| 查看次数: |
14472 次 |
| 最近记录: |