mikemclin/passport-custom-request-grant

Laravel Passport 的自定义请求授权

1.0.1 2017-11-27 12:45 UTC

This package is not auto-updated.

Last update: 2024-09-23 13:26:37 UTC


README

使用 composer 安装... composer require mikemclin/passport-custom-request-grant

版本

  • Laravel 5.4 - 使用版本 ^1.0
  • Laravel 5.3 - 使用版本 ^0.1

设置

  • MikeMcLin\Passport\CustomRequestGrantProvider 添加到 providers 列表中,必须在 Laravel\Passport\PassportServiceProvider 之后。
  • 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,这将返回一个 无效凭证 错误响应

{
  "error": "invalid_credentials",
  "message": "The user credentials were incorrect."
}