我还是Django的新手,我正在寻找一种登录方法。这样做的最佳逻辑是什么,并将信息存储在会话中,以便用户可以维护他们的登录?
我有一个用于身份验证的模型,如下所示:
class User(models.Model):
email_address = models.CharField(max_length=128)
password = models.CharField(max_length=128) # sha512 of password w/salt
password_salt = models.CharField(max_length=128) # sha512 of random number as salt
基本上,我会为这样的视图编写一个登录方法:
@ratelimit_post(minutes = 1, requests = 5, key_field = 'email_address')
def login(request):
requestedUser = User.objects.get(email_address=request.POST['email_address'])
if requestedUser == None:
fail_no_user()
passwordHash = sha512(request.POST['password'] + requestedUser.password_salt)
if requestedUser.password != passwordHash:
fail_wrong_password()
else:
request.session['user_id'] = user.id
request.session['is_auth'] = True
success_login()
这是一种使用Django处理登录和会话的安全方法吗?由于我还是新手,我不确定这是否是一种公认的方法。我在这里缺少什么安全和性能方面的东西?
答案 0 :(得分:2)
可能最好的选择是创建自己的后端。
请参阅此处的文档:https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend
编写身份验证后端
身份验证后端是一个 实现两个方法的类:get_user(user_id)和 认证(**凭证)。
答案 1 :(得分:0)
Django带有一个非常简单而强大的身份验证系统,here是官方文档。