Python Django身份验证在生产环境中不起作用,但在本地起作用。模型不';不要使用OnetoOnefield
超级用户创建工作正常,我可以在管理面板中访问它们。但是,当用户创建帐户时,他们被添加为用户,但不会传播到FacebookProfile模型中(因此我无法添加他们的id、webpull等)(他们在使用sqllite3开发时传播良好) 我正在azure上使用mysql models.pyPython Django身份验证在生产环境中不起作用,但在本地起作用。模型不';不要使用OnetoOnefield,python,django,azure,heroku,Python,Django,Azure,Heroku,超级用户创建工作正常,我可以在管理面板中访问它们。但是,当用户创建帐户时,他们被添加为用户,但不会传播到FacebookProfile模型中(因此我无法添加他们的id、webpull等)(他们在使用sqllite3开发时传播良好) 我正在azure上使用mysql models.py from django.db import models from django.forms import ModelForm from django.contrib.auth.models import Us
from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
from django import forms
class FacebookProfile(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
id = models.PositiveIntegerField(primary_key = True)
webpull= models.CharField(max_length =1000, null = True)
score = models.PositiveIntegerField(default = 0, editable = True)
times_called = models.PositiveIntegerField(default = 0, editable = True)
level = models.FloatField(default = 0, editable =True)
我的facebook用户表单
forms.py
我的自定义身份验证系统
auth_backend.py
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class PasswordlessAuthBackend(ModelBackend):
def authenticate(self, username = None):
try:
return User.objects.get(username = username)
except:
return None
我处理Facebook API输入的参数并将其存储在模型中的视图
views.py
我的生产设置.py
AUTHENTICATION_BACKENDS = (
'authentication.auth_backend.PasswordlessAuthBackend',
('django.contrib.auth.backends.ModelBackend'),
)
这是一种没有密码的身份验证方法
现在是模型中OnetoOneField的问题吗?我不明白为什么所有东西都在本地工作,但当我推到heroku时,唯一不起作用的是将用户传播到FacebookProfile。
id=request.POST.get('username')
看起来像是id\ucode>不是整数,正如PositiveIntegerField字段所要求的那样。你能检查一下,如果你把它放在整数里,它会起作用吗?@Never我把Facebook返回的id存储为用户名(糟糕的做法,对不起),所以用户名是一个整数,像1002131342321id=request.POST.get('username')
看起来像是id
不是整数,正如PositiveIntegerField字段所要求的那样。你能检查一下,如果你把它放在整数里,它会工作吗?@neverwanner我将Facebook返回的id存储为用户名(糟糕的做法对不起),所以用户名是一个像1002131342321这样的整数
if request.method == "POST":
print ('ive been posted')
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
username = request.POST.get('username')
print (first_name, last_name, username)
facebook_user = FacebookUserForm(data=request.POST)
facebook_profile = FacebookProfileForm()
has_account = authenticate(username = username)
print (has_account)
if has_account:
print ('this has account')
login(request, has_account)
return HttpResponseRedirect('/home/')
else:
id_ = request.POST.get('username')
webpull = request.POST.get('webpull')
print (id_, birthday, webpull)
print (facebook_user)
user = facebook_user.save()
profile = facebook_profile.save(commit = False)
profile.user = user
profile.webpull = webpull
profile.id = id_
profile.save()
now_has_account = authenticate(username = username)
login(request, now_has_account)
return HttpResponseRedirect('/home/')
AUTHENTICATION_BACKENDS = (
'authentication.auth_backend.PasswordlessAuthBackend',
('django.contrib.auth.backends.ModelBackend'),
)