Laravel Passport - 不支持授予类型

问题描述 投票:0回答:6

我已经按照文档安装了 Laravel Passport,并且修改了所需代码的所有区域。

我正在努力设置密码授予令牌,以便用户在使用网站的用户名和密码登录时能够获得 API 令牌。 不过,当涉及到 grant_type 时,我遇到了一个问题。 由于某种原因,Laravel 抱怨授权类型无效。

{
  "error": "unsupported_grant_type",
  "message": "The authorization grant type is not supported by the authorization server.",
  "hint": "Check the `grant_type` parameter"
}

这些是我要发布到的字段

/oauth/token

client_id = 4
client_secret = SMiYE7XqDNtXKQnmkYmFnXxfAaV83vRhnJ9zwCtZ
username = [email protected]
password = **************
grant_type = password
scope = *

我已经跑步了

php artisan passport:install
并且我也尝试过跑步
php artisan passport:client --password

这两个命令都有效,并且都创建了客户端和机密,但是,我似乎无法克服有关 grant_type 的错误。

有什么建议可以帮助我解决这个问题,以便密码授予令牌对我有用吗?

laravel-5.3 laravel-passport
6个回答
50
投票

看来您必须将参数作为表单数据发送,而不是像我一样在标题中发送......菜鸟错误!


12
投票

我正在使用 Postman,我已将所有参数放入 Params 中。邮递员显示以下回复

{
    "error": "unsupported_grant_type",
    "message": "The authorization grant type is not supported by the authorization server.",
    "hint": "Check the `grant_type` parameter"
}

现在我将所有参数放入Body中,然后按发送按钮,效果很好。


1
投票

对我来说,问题是我没有使用

Request $request
,我使用的是我创建的
RegisterRequest
$请求。


0
投票

初始网址

https://restfulapi.test/oauth/authorize?client_id=3&redirect_url=http://restfulapi.test?response_type=code

解决方案

https://restfulapi.test/oauth/authorize?client_id=3&redirect_url=http://restfulapi.test&response_type=code

我必须将response_type之前的问号替换为

&


0
投票

阅读 Laravel 文档给我减轻了很多压力。

oauth\token
用于使用指定的授权类型检索令牌,路由将返回包含 access_token、refresh_token 和 expires_in 属性的 JSON 响应。 expires_in 属性包含访问令牌过期之前的秒数 (ref) 您应该

  1. 安装护照
  2. 发布服务提供商和迁移并进行迁移。
  3. 设置登录/注册的路由以创建帐户并登录。
  4. 在您的 User 模型中,添加
    HasApiTokens
    from use Laravel\Passport\HasApiTokens;
  5. 在登录方法的响应中,添加令牌作为响应的一部分。 enter image description here
  6. 测试您在邮递员上的回复 enter image description here

0
投票

通过 Laravel 中的实现扩展已接受的答案。

您可以使用它来立即验证刚刚注册的 API 用户:

use Illuminate\Support\Facades\Http;

$user = User::create($request->all());

$token = (object) Http::asForm()->post(url('/oauth/token'), [
    'grant_type' => 'password',
    'client_id' => $client_id,
    'client_secret' => $client_secret,
    'username' => $user->email,
    'password' => $user->password,
    'scope' => '*',
])->json();

return response()
    ->json($user->toArray())
    ->cookie('token', $token, $token->expires_in / 60);
© www.soinside.com 2019 - 2024. All rights reserved.