sim1barreto / passport-custom-request-grant
Laravel Passport 的自定义请求授权
dev-master
2023-06-08 08:48 UTC
Requires
- laravel/passport: ^7.0
This package is auto-updated.
Last update: 2024-09-08 11:31:11 UTC
README
使用 composer 安装... composer require mikemclin/passport-custom-request-grant
版本
- Laravel 5.4 - 使用版本
^1.0
- Laravel 5.3 - 使用版本
^0.1
设置
- 在
Laravel\Passport\PassportServiceProvider
之后将MikeMcLin\Passport\CustomRequestGrantProvider
添加到你的服务提供者列表。 - 将
byPassportCustomRequest($request)
方法添加到你的User
模型(或与 Passport 配置工作的任何模型)。- 该方法应接受一个
Illuminate\Http\Request
对象。 - 您应该根据此请求进行授权并检索用户
- 如果您发现请求满足您的要求,则返回用户模型。
- 如果请求没有满足您的要求,则返回
null
- 该方法应接受一个
使用方法
- 向
https://your-site.com/oauth/token
发送一个 POST 请求,就像使用 密码 或 刷新 授权一样。 - POST 请求体应包含
grant_type
=custom_request
。 - 请求将路由到您的
User::byPassportCustomRequest()
函数,您将在该函数中确定是否授权访问。 - 如果成功,将返回一个
access_token
和refresh_token
。
示例
以下是 User::byPassportCustomRequest()
方法可能的样子...
/** * Verify and retrieve user by custom token request. * * @param \Illuminate\Http\Request $request * * @return \Illuminate\Database\Eloquent\Model|null * @throws \League\OAuth2\Server\Exception\OAuthServerException */ public function byPassportCustomRequest(Request $request) { try { if ($request->get('sso_token')) { return $this->bySsoToken($request->get('sso_token')); } } catch (\Exception $e) { throw OAuthServerException::accessDenied($e->getMessage()); } return null; }
在此示例中,应用程序能够根据提交的 JSON 有效负载中的 sso_token
属性验证用户。这是此应用程序实现该功能的 bySsoToken
方法。它将返回 null
或用户对象。它也可能抛出异常来解释为什么令牌无效。《code>byPassportCustomRequest 会捕获这些异常并将它们转换为适当的 OAuth 异常类型。如果请求负载中不存在 ssoToken
,则我们返回 null
,这会导致返回一个 invalid_credentials 错误响应
{ "error": "invalid_credentials", "message": "The user credentials were incorrect." }