sim1barreto/passport-custom-request-grant

Laravel Passport 的自定义请求授权

dev-master 2023-06-08 08:48 UTC

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_tokenrefresh_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."
}