oxid-esales/graphql-base

OXID eSales GraphQL基础模块

安装数: 70,769

依赖者: 9

建议者: 1

安全: 0

星标: 24

关注者: 11

分支: 14

类型:oxideshop-module

v9.0.0 2024-07-04 10:49 UTC

This package is auto-updated.

Last update: 2024-09-20 13:00:50 UTC


README

Build Status Build Status

Stable Version Latest Version PHP Version

此模块提供

  • 一个基本的GraphQL实现,用于OXID eShop
  • 使用JWT进行授权和认证
  • 一个查询,用于登录并获取JWT进行后续认证

文档

  • 完整文档,包括GraphQL模式,可以在这里找到。

用法

这假设您已经安装并运行了OXID eShop(至少是OXID-eSales/oxideshop_ce: v7.2.0组件,它是7.2.0编译的一部分)。

分支兼容性

  • 10.x版本(或b-7.2.x分支)与最新7.2.x商店编译版本或b-7.2.x商店编译分支兼容
  • 9.x版本(或b-7.1.x分支)与最新7.1.x商店编译版本或b-7.1.x商店编译分支兼容
  • 8.x版本(或b-7.0.x分支)与最新7.0.x商店编译版本或b-7.0.x商店编译分支兼容
  • 7.x版本(或b-6.5.x分支)与最新6.5.x商店编译版本或b-6.5.x商店编译分支兼容
  • 6.x版本(或b-6.4.x分支)与最新6.4.x商店编译版本或b-6.4.x商店编译分支兼容
  • 5.x版本(或b-6.3.x分支)与最新6.3.x商店编译版本或b-6.3.x商店编译分支兼容(注意:目前不支持PHP 8)

安装

# Install desired version of oxid-esales/graphql-base module, in this case - latest released 9.x version, While updating the version you should add additional flag --with-all-dependencies with below command.
$ composer require oxid-esales/graphql-base ^9.0.0 --with-all-dependencies

您应该在安装模块后以及每次模块更新后运行迁移。

$ vendor/bin/oe-eshop-doctrine_migration migrations:migrate oe_graphql_base

在引入模块后,您需要通过OXID eShop管理员或CLI激活它。

$ bin/oe-console oe:module:activate oe_graphql_base

更新

如果您想从旧版本更新到此模块的新版本,请运行以下命令以确保所有依赖项(包括composer.lock中的依赖项)都是兼容的。

$ composer update --with-all-dependencies

如何使用

您可以使用您喜欢的GraphQL客户端来探索API,如果您还没有安装,您可以使用Altair GraphQL客户端

要登录并检索令牌,请将以下GraphQL查询发送到服务器

query {
    token (
        username: "admin@admin.com",
        password: "admin"
    )
}

您可以直接在终端中使用curl进行基本检查,以查看GraphQL基础模块是否按预期运行。要检索有效令牌,您需要将以下用户名和密码替换为有效的登录凭证。

$ curl http://oxideshop.local/graphql/ \
  -H 'Content-Type: application/json' \
  --data-binary '{"query":"query {token(username: \"admin@admin.com\", password: \"admin\")}"}'

您应该看到类似以下响应

{
    "data": {
        "token": "a-very-long-jwt"
    }
}

然后,将此token作为HTTP Authorization头中的授权发送到每个请求中,如下所示

Authorization: Bearer a-very-long-jwt

如何使用刷新令牌

要登录并检索刷新和访问令牌,请将以下GraphQL查询发送到服务器

query {
    login (
        username: "admin@admin.com",
        password: "admin"
    ) {
        refreshToken
        accessToken
    }
}

响应应包含请求的所有令牌

{
    "data": {
        "login": {
            "accessToken": "the-same-long-jwt-token",
            "refreshToken": "a-255-character-long-string"
        }
    }
}

请求将设置一个带有唯一指纹的HttpOnlycookie。访问令牌的accessToken声明包含此指纹的散列版本。访问令牌应作为上面描述的Bearer类型授权发送。在访问令牌的生命周期结束后,您需要刷新它。为此,您需要发送以下查询

query {
    refresh (
        refreshToken: "your-refresh-token",
        fingerprintHash: "from-access-token-claims"
    )
}

如果令牌有效且散列与作为cookie发送的指纹匹配,您将收到一个新的响应令牌

{
    "data": {
        "refresh": "a-new-long-jwt"
    }
}

并且,与它一起,一个新的指纹cookie和jwt令牌中的fingerprintHash声明。

如何扩展

关于扩展任何模块的信息可以在OXID eSales文档中找到。

如何在OXID GraphQL API文档中展示如何扩展GraphQL模块类型并实现您的新突变和查询。

测试

语法检查和静态分析

$ composer static

单元/集成/验收测试

  • 将此模块安装到正在运行的OXID eShop中
  • 重置商店的数据库
$ bin/oe-console oe:database:reset --db-host=db-host --db-port=db-port --db-name=db-name --db-user=db-user --db-password=db-password --force
  • 运行单元/集成测试
$ ./vendor/bin/phpunit -c vendor/oxid-esales/graphql-base/tests/phpunit.xml
  • 运行验收测试
$ SELENIUM_SERVER_HOST=selenium MODULE_IDS=oe_graphql_base vendor/bin/codecept run acceptance -c vendor/oxid-esales/graphql-base/tests/codeception.yml

问题

有关GraphQL模块的问题,请使用OXID eShop缺陷跟踪系统

贡献

您想贡献力量?🙌太棒了🙌
请查看贡献指南

构建方式

许可证

OXID模块和组件许可证,见LICENSE文件