使用Allauth登录时生成JWT

13
如何使用django-rest-framework-jwt生成一个令牌,并将其传递给一个模板,该模板可以将令牌存储在本地存储中,在使用allauth登录时?
我知道django-rest-framework-jwt允许您通过POST生成令牌:
$ curl -X POST -d "username=admin&password=abc123" http://localhost:8000/api-token-auth/

但是你如何在allauth的登录/注册流程中实现这一点呢?


你会将allauth的登录/注册作为rest框架端点来用于登录或注册吗? - Seenu S
2个回答

5

我没有使用过JWT,但我认为与常规令牌相比,JWT没有什么特别之处,除了额外的安全性和更重要的是不必保留令牌数据库表。因此,我的答案是针对常规令牌,假设/希望您可以调整到JWT。

我假设您正在尝试编写独立的客户端,在这种情况下,问题在于django-allauth实际上并不适用于客户端/API的使用,因此许多魔法不能通过API使用。请参见这个旧问题,我认为它仍然有效:第三方REST/JSON API

如果您向下滚动,您将看到有人推荐使用django-rest-auth来处理API的社交登录,同时保持主要的django-allauth处理本地django网站方面的事务。

我还没有将它们一起使用(目前我不支持API端的社交登录,因此还没有必要处理它)。

这篇文章展示了使用django-rest-framework开发Angular客户端的绝佳示例。您将看到它如何创建自己的API来进行注册和登录。您应该能够用django-rest-auth替换那部分内容,但重点是django-allauth在通过API传递的任何内容中都不会起到很大作用(遗憾)。

最后,您可能还想检查一下我的实现这里。查看“authentication”应用程序,并查看如何使用它的测试,这是我版本的链接3


3

allauth主要用于多页面应用程序,对于API登录,我建议依赖于rest_authRest Auth文档

它内置了基于all-auth的登录/注册等功能,但适用于单页应用程序。

然后更新设置为:

REST_USE_JWT = True

'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
            'rest_framework.authentication.BasicAuthentication',

    ],

现在,您应该在登录调用的响应中收到JWT令牌。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接