我有以下代码片段:
user = User(username='h@h.com',email='h@h.com')
user.set_password('pass')
user.save()
u = authenticate(username='h@h.com', password='pass') #this always returns None!!!
问题是,你总是无。我已经关注了其他堆栈溢出帖子上的代码示例,并将其范围缩小到上述几行。
关于可能发生什么的任何想法?
我有以下代码片段:
user = User(username='h@h.com',email='h@h.com')
user.set_password('pass')
user.save()
u = authenticate(username='h@h.com', password='pass') #this always returns None!!!
问题是,你总是无。我已经关注了其他堆栈溢出帖子上的代码示例,并将其范围缩小到上述几行。
关于可能发生什么的任何想法?
在你的设置中加入这样的东西
#Authentication backends
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
或者如果您将 userena 用于您的帐户
#Authentication backends
AUTHENTICATION_BACKENDS = (
'userena.backends.UserenaAuthenticationBackend',
'guardian.backends.ObjectPermissionBackend',
'django.contrib.auth.backends.ModelBackend',
)
有趣的是,check_password 在下面返回 True:
eml = "4@a.com"
pw = "pass"
uname = 'w2'
user = User.objects.create_user(uname,eml,pw)
user.save()
log.debug("Password check passes?")
log.debug(user.check_password(pw)) # Logs True!!!
user = authenticate(username=uname, password=pw)
为什么不创建这样的用户:
user = User.objects.create_user( username="whatever", email="whatever@some.com", password="password")
user = authenticate( username="whatever",password="password")
在 settings.py 中,添加
AUTH_USER_MODEL = your custom user class
例如,如果 django 应用程序名称是 office 并且自定义用户类是 Account 那么
AUTH_USER_MODEL = 'office.Account'
set_password
是一种误导性的方法,它不会将密码保存在用户表上。你需要打电话user.save()
才能让它在你的流程上工作
还要检查您是否拥有正确的用户名/密码组合。有时,从 createsuperuser 命令创建的用户名与您通常使用的用户名不同。
正如他们中的大多数人所建议的那样,如果我们使用User.objects.create_user(**validated_data)
它来创建用户,它将散列原始密码并存储散列密码。如果您使用 User 模型serializers
来验证和创建用户,则需要像这样覆盖序列化器方法
class UserSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"
# this is the method responsible for insertion of data with hashed password
def create(self, validated_data):
return User.objects.create_user(**validated_data)