React应用用dj-rest-auth注册失败,报400及ConnectionRefusedError
解决dj-rest-auth注册时的ConnectionRefusedError及400错误
问题1:前端请求字段不匹配导致400错误
你的React请求里用了user字段,但dj-rest-auth的注册接口默认接收的是username字段,这会导致后端无法识别字段,返回400错误。同时原代码的then回调里没有返回res.json(),后续无法获取响应数据。
修改register.js:
fetch('/api/dj-rest-auth/registration/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: 'alalala', // 将user改为username password1: '1234', password2: '1234', email: 'ala@gmail.com', }) }) .then(res => res.json()) // 确保返回res.json(),以便后续处理响应
问题2:邮件服务未配置导致ConnectionRefusedError
dj-rest-auth依赖django-allauth,默认开启了邮箱验证(ACCOUNT_EMAIL_VERIFICATION = 'mandatory'),但本地环境没有配置邮件服务器,导致发送验证邮件时出现连接拒绝错误。
解决方法二选一:
方法A:禁用邮箱验证
在settings.py中添加:
ACCOUNT_EMAIL_VERIFICATION = 'none'
这样注册后不会触发邮件发送流程,直接完成注册。
方法B:使用测试邮件后端(推荐用于开发)
将邮件输出到控制台,无需实际邮件服务器:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
额外检查
- 确保已执行sites应用的迁移:
python manage.py migrate
因为你在INSTALLED_APPS中添加了django.contrib.sites,需要迁移生成site表数据。
- 如果你自定义了
CustomRegisterSerializer,要确保序列化器中的字段与前端请求字段一致,比如如果自定义了用户名字段,要对应修改前端参数。
内容的提问来源于stack exchange,提问作者euh
相关产品推荐
相关产品推荐

