跳转到主要内容

一个用于将Shopify身份验证添加到Django应用的简单包。

项目描述

Django Shopify Auth

PyPI version example workflow

这个Django包使得将Shopify身份验证集成到Django应用中变得简单。

  • 它提供了一个基于AbstractBaseUserRemoteUserBackend的自定义Django认证方案,这意味着商店将作为您的Django应用的“用户”进行认证。这使得使用常见的Django模式和库(如通过request.user访问当前认证的商店)变得更加容易。

  • 它将用户的Shopify访问令牌持久化存储在数据库中,而不是会话中,这意味着您的应用能够在用户未登录时代表用户进行API调用。

  • 它支持嵌入式Shopify应用的基于令牌的认证流程。

嵌入式与独立应用

嵌入式应用现在需要基于会话令牌的认证。支持已在单独应用中实现。如果您不确定使用哪种方法,请阅读这篇文章

要求

测试是在定义在.github/workflows/ci.yml中的Django版本上运行的。这个包可能适用于其他Django版本,但无法保证。

您需要一个Shopify合作伙伴账户并创建一个应用,以便获取API密钥和密钥。

包安装和设置 - 独立应用

设置有几个部分,但希望以下说明会使事情变得简单。

在本配置中,我们假设您正在使用标准的Django项目布局(使用django-admin.py startproject命令创建的那种)。我们还假设我们的项目名为auth_demo,并且我们项目中的主要Django应用将被命名为auth_app

1. 安装包

通过pip安装非常简单

> pip install django-shopify-auth

安装完包后,将shopify_auth添加到您的INSTALLED_APPS中。

2. 添加自定义用户模型

因为shopify_auth使用了Django的认证系统,它提供了一个自定义认证后端(shopify_auth.backends.ShopUserBackend),允许通过Shopify的OAuth流程进行认证。

此后端要求您的应用的用户模型(由您的settings.py中的AUTH_USER_MODEL指定)继承自shopify_auth.models.AbstractShopUser。为此,只需将类似以下内容添加到您的Django应用的models.py文件中

# auth_demo/auth_app/models.py
from shopify_auth.models import AbstractShopUser

class AuthAppShopUser(AbstractShopUser):
    pass

在继续之前,请确保已通过以下操作将此模型添加到数据库中

python manage.py makemigrations
python manage.py migrate

然后请确保在settings.py中包含以下行或类似内容

AUTH_USER_MODEL = 'auth_app.AuthAppShopUser'

3. 配置设置

除了设置AUTH_USER_MODEL之外,还需要在settings.py中添加一些其他要求

# Configure Shopify Application settings
SHOPIFY_APP_NAME = 'Your App Name'
SHOPIFY_APP_API_KEY = os.environ.get('SHOPIFY_APP_API_KEY')
SHOPIFY_APP_API_SECRET = os.environ.get('SHOPIFY_APP_API_SECRET')
SHOPIFY_APP_API_SCOPE = ['read_products', 'read_orders']
# Find API version to pin at https://help.shopify.com/en/api/versioning
SHOPIFY_APP_API_VERSION = "0000-00"
SHOPIFY_APP_DEV_MODE = False

# Use the Shopify Auth authentication backend as the sole authentication backend.
AUTHENTICATION_BACKENDS = (
    'shopify_auth.backends.ShopUserBackend',
)

# Add the Shopify Auth template context processor to the list of processors.
# Note that this assumes you've defined TEMPLATE_CONTEXT_PROCESSORS earlier in your settings.
TEMPLATE_CONTEXT_PROCESSORS += (
    'shopify_auth.context_processors.shopify_auth',
)

# Use the Shopify Auth user model.
AUTH_USER_MODEL = 'auth_app.AuthAppShopUser'

# Set the login redirect URL to the "home" page for your app (where to go after logging on).
LOGIN_REDIRECT_URL = '/'

# Set secure proxy header to allow proper detection of secure URLs behind a proxy.
# This ensures that correct 'https' URLs are generated when our Django app is running behind a proxy like nginx, or is
# being tunneled (by ngrok, for example).
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

注意,在上面的示例中,应用程序API密钥和API密钥是从环境设置中提取的,这是Django应用程序的最佳实践,有助于避免敏感信息意外检查到源文件中。

SHOPIFY_APP_DEV_MODE设置为True允许您通过跳过应用程序的外部OAuth阶段在本地测试您的应用程序。因为它意味着您可以用任何商店登录到您的应用程序,所以显然您永远不应该在生产中将此设置为True

现在所有设置都配置好了,您可以通过运行migrate来为新用户模型设置数据库

> python manage.py migrate

4. 配置URL映射

shopify_auth URL包含在您的项目的urls.py

# urls.py
from django.urls import include, path

urlpatterns = [
    path('login/', include('shopify_auth.urls')),

    # ... remaining configuration here ...
]

5. 创建应用程序视图

现在配置已经完成,您可以从构建您的应用程序开始。

您应用程序中的所有视图都应该使用@login_required进行装饰。此装饰器将检查用户是否已通过Shopify OAuth流程进行认证。如果没有,他们将重定向到登录屏幕。

from django.shortcuts import render
from shopify_auth.decorators import login_required

@login_required
def home(request, *args, **kwargs):
    return render(request, "my_app/home.html")

6. 调用Shopify API

要代表用户调用Shopify API,我们可以在with语句中使用用户的session属性

def view(request, *args, **kwargs):

    # Get a list of the user's products.
    with request.user.session:
        products = shopify.Product.find()

    # ... remaining view code ...

在幕后,使用with request.user.session设置了一个临时Shopify API会话,使用我们在认证期间为该特定用户获得的OAuth令牌。

with语句内包装的所有代码都是在指定的用户上下文中执行的。您应该始终使用此模式来包装对Shopify API的调用。

合作伙伴应用程序设置

除了在您的本地Django项目中安装并运行包之外,您还需要通过Shopify合作伙伴仪表板配置您的应用程序。

为了避免在客户尝试安装您的应用程序时遇到OAuth错误,请确保您的应用程序设置中包含了到/login/finalize/(包括尾随斜杠)的绝对URL(在白名单URL中)。例如,如果您的应用程序位于https://myapp.example.com,则应在应用程序设置的“重定向URL”部分中包含https://myapp.example.com/login/finalize/

有疑问或问题吗?

阅读有关可能的API调用的信息:https://shopify.dev/

在Stack Overflow上提出技术问题:https://stackoverflow.com/questions/tagged/shopify

发行历史

有关更改的完整列表,请参阅变更日志

特别感谢

Josef Rousek致以崇高的敬意,感谢他的贡献和帮助维护此包。

与我们合作!

如果您想使用Django,甚至可能使用React,当前维护者Digismoothie.com正在招聘

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django_shopify_auth-2.1.1.tar.gz (16.9 kB 查看哈希值)

上传时间 源代码

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面