【问题标题】:Authenticate with only username仅使用用户名进行身份验证
【发布时间】:2020-08-29 23:12:24
【问题描述】:

我创建了测验应用程序,其中用户仅使用用户名登录并继续进行测验,但 django 身份验证不起作用 视图.py

class UserFormView(View):
form_class = UserForm
template_name = 'app/registration_form.html'

def get(self, request):
    form = self.form_class(None)
    return render(request, self.template_name, {'form': form})

def post(self, request):
    form = self.form_class(request.POST)
    if form.is_valid():
        user = form.save(commit=False)
        # cleaned data
        username = form.cleaned_data['username']
        user.save()
        # autheticate
        user = authenticate(username=username)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('app:quiz_list')
            else:
                return HttpResponse('active nahi hai')
        else:
            return HttpResponse('pehchan me nahi hai')

    return render(request, self.template_name, {'form': form})

【问题讨论】:

  • 那么,如果两个(或更多)人同时使用相同的用户名登录会发生什么?
  • 没有任何凭据没有太大意义,因为任何人都可以劫持任何帐户,即使它是随机生成的,它仍然不安全

标签: django django-models django-rest-framework django-forms django-views


【解决方案1】:

如果您使用默认身份验证后端,则需要 用户名密码

您可以通过关注相关documentation自行创建自定义身份验证后端

考虑到您并没有真正进行身份验证,您可以从数据库中过滤用户并在之后使用登录功能

#TODO add exception if there is no user with username
user = User.objects.filter(username=username).get()
login(request, user)

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多