Laravel Passport invalid_grant 用于密码 grant_type
Posted
技术标签:
【中文标题】Laravel Passport invalid_grant 用于密码 grant_type【英文标题】:Laravel Passport invalid_grant for password grant_type 【发布时间】:2020-05-24 04:32:53 【问题描述】:我一直在尝试为我的 api 创建一个access_token
。我有followed the setup 并且正在使用 Postman 来测试/创建令牌。我似乎无法通过 invalid_grant
错误。
我已经尝试了似乎我能够找到的所有组合,但没有任何运气。这是我的设置:
发送POST
请求至:http://mywebsite.local/oauth/token
在正文中,我将 form-data
设置为此(名称/值):
grant_type password
client_id 1
client_secret <super_long_string>
username my@email.com
password secret
我使用 tinker 创建了一个虚拟用户:
factory('App\User')->create()
我在上面的用户名/密码中使用了新创建的用户。
无论我在做什么(没有通过任何东西),这都是我经常看到的错误:
"error": "invalid_grant",
"error_description": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.",
"hint": "",
"message": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."
我读过很多次这意味着我试图获得的grant_type
与客户不匹配。我正在使用php artisan passport:client --password
创建客户端,所以我不明白为什么它无效。我只有一个客户,所以我知道我使用的是正确的id
。 This issue 好像是一样的东西,我看到了,但已经关闭了。
对于我的标头,我只设置Content-Type application/json
,我没有为授权标头设置任何内容。
我不确定还可以尝试什么。感谢您的任何建议!
【问题讨论】:
【参考方案1】:正如here 所说,从 5.8 版本开始,默认密码“secret”已更新为“password”。所以你输入的是旧密码。
【讨论】:
我现在觉得愚蠢和尴尬的程度超出了图表。谢谢你逗我。【参考方案2】:尝试为用户散列您的密码。 起初我认为密码至少需要 8 个字符长。 然后,例如如果您使用“test1234”作为创建用户的密码,请转到您的终端并输入:
>> php 工匠修补匠
>> echo bcrypt('test1234')
复制输出并将其保存在您创建的用户的密码数据库列中,而不是 test1234。现在您对http://mywebsite.local/oauth/token 的发帖请求应该可以工作了。
【讨论】:
【参考方案3】:我在laravel 8
遇到了同样的问题,我通过重新安装laravel passport
解决了它
这些是步骤:
1- 在AuthServiceProvider.php
中评论这一行
if (! $this->app->routesAreCached())
//Passport::routes();
2- 在 composer.json 中删除以下行:
"laravel/passport": "^xx.x",
3- 运行这些命令:
composer dump-autoload
composer update
php artisan migrate:fresh
现在我们要安装laravel passport
4- 运行这些命令:
composer require laravel/passport
php artisan migrate
php artisan passport:install --force
5- 在AuthServiceProvider.php
添加这些行:
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
protected $policies = [
'App\Models\Model' => 'App\Policies\ModelPolicy',
];
public function boot()
$this->registerPolicies();
if (! $this->app->routesAreCached())
Passport::routes();
6- 在config\auth.php
中添加这些代码:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
完成,经过这些步骤,laravel-passport
工作正常
【讨论】:
以上是关于Laravel Passport invalid_grant 用于密码 grant_type的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Passport 不支持_grant_type
Laravel 8、Passport 和 MongoDB 集成
无法找到 [Laravel\Passport\Client] 的工厂
homestead的laravel项目错误:Use of undefined constant JSON_INVALID_UTF8_SUBSTITUTE - assumed ‘JSON_INVAL(代