【问题标题】:How to stop python-social-auth and reverse a transaction during pipeline step?如何在管道步骤中停止 python-social-auth 并撤销交易?
【发布时间】:2019-03-30 20:35:41
【问题描述】:

我有一个使用 python-social-auth 进行身份验证的 Django 应用程序。

我的 django 设置中有这个:

SOCIAL_AUTH_PIPELINE = (
    ...
    'my.app.my.custom.pipeline',
)

如何在我的自定义管道中停止整个用户创建过程?

我尝试抛出各种异常,包括ValueErrorAuthException,但创建的用户仍保留在数据库中。抛出异常不会逆转数据库事务吗?

【问题讨论】:

  • 您的自定义管道是在 create_user 函数之前还是之后?如果用户已经创建,您需要手动删除它,抛出异常会导致管道停止,但已经保存的数据仍然存在。
  • @abidibo 我的自定义管道在最后。手动删除用户可能会起作用,但管道也会在数据库中创建一些其他数据。我正在寻找一个独立于实现的更清洁的解决方案,例如,逆转整个事务将是诀窍,但我该怎么做呢?
  • 也许您可以将登录视图包装在事务中(docs.djangoproject.com/en/1.11/topics/db/transactions),但我以前从未这样做过

标签: python django python-social-auth


【解决方案1】:

在你的 Django 应用中定义一个视图,不要忘记为它注册一个路径:

def access_denied(request):
    return HttpResponse("<h1>Access denied</h1>")

然后,在您的自定义管道中注册的函数只需要返回视图:

if not allowed_email(fields["email"]):
    return redirect(access_denied)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2014-01-28
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多