多密码DJANGO

2024-09-26 17:51:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个应用程序,该应用程序可以与AD用户进行身份验证,但它还需要单独的密码才能对其他两个服务进行身份验证。有没有办法使用3个密码来验证登录?我可以为每个服务单独设置登录验证,但我想知道是否可以在同一会话中存储所有三个密码。原因是用户需要通过多个服务的身份验证才能使用此应用程序的所有功能

以下是我在我看来的大致情况。py

        request.session['pass_kinit2030'] = password
        request.session['reg_pass'] = reg_pass
        request.session['oraclepass'] = oraclepass


Tags: 用户py功能身份验证应用程序密码requestsession
2条回答

我最终使用了多种try/except方法来测试其他服务的登录。 尝试:

   try:
        a = add_user().login(username=creds['user'], password=creds['banpass'])
        add_user().logout(a)
    except:
        messages.error(request, 'Banner Password Is Incorrect')
        return redirect('login')
    if Usermanager(creds=creds).test_login():
        pass
    else:
        messages.error(request, 'Wrong Regular Account Credentials')
        return redirect('login')
    if user is not None:
        auth.login(request, user)
        return redirect('userinfo')
    else:
        messages.error(request, 'Wrong AdminCredentials')
        return redirect('login')

我可以看到几个选项:

  1. 如果您的3个密码都相等,我想您只需在Django中定义自己的^{}。在这样的后端,您只需获取密码并检查它在所有三个服务中是否有效

yourapp/auth.py中:

from django.contrib.auth.backends import BaseBackend

class MyAuthBackend(BaseBackend):
    def authenticate(self, request, username=None, password=None):
        # Check reg and oracle - if valid, return request.user, else return None

settings.py中:

AUTHENTICATION_BACKENDS = ['yourapp.auth.MyAuthBackend']

但是既然你说了^{,我想他们是不平等的

  1. 如果密码不相等,首先在这个应用程序中要求另外两个密码是有问题的。您不应该在登录表单中要求用户输入另外两个密码。通常,您应该使用某种令牌对其他两个应用进行身份验证。然后,您可以在不同于登录视图的视图中使用该令牌连接应用程序。有了这样的令牌,您应该将其值保存在与用户有OneToOneField关系的新模型中:
from django.conf import settings
from django.db import models

class UserTokens(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE)
    reg_token = forms.CharField(
        null=True,
        max_length=100)
    oracle_token = models.CharField(
        null=True,
        max_length=100)

您也可以使用密码作为令牌,只要密码是以与令牌类似的方式生成的(并且不能更改为用户给定的值-我知道这种情况)

  1. 最后但并非最不重要的一点是,您可能不喜欢令牌的想法,或者可能没有在相关的两个应用程序中实现它们。然后问题是,这两个应用程序是如何访问的?它们是HTTP服务器吗?如果是,您已经准备好了。浏览器应将登录会话分别保存到其他两个应用程序。而且,如果我们谈论某种API,您仍然可以重定向到这些应用程序/iframe,或者执行JavaScript获取或发布,是的,JS请求将使用登录会话

相关问题 更多 >

    热门问题