Django如何防止多个用户使用相同的凭据登录

AKV*_*AKV 7 django django-authentication

我正在使用django auth模块开发一个Django应用程序,并希望使用相同的用户名和密码防止多次登录.

它应该使用相同的用户名和密码防止在不同计算机上进行多次登录.我如何在Django中实现这一目标?

我们必须牢记以下事项:

  1. 如果用户关闭浏览器而不注销
  2. 如果会话超时

小智 5

您可以尝试这样做,它注销第一个用户,然后登录第二个。在您的应用目录中添加middleware.py(与模型,视图等级别相同)并添加此代码。当同一个人使用多个设备时有用。确保将其添加到中间件类中:“ myapp.middleware.UserRestrict”,

class UserRestrict(object):
    def process_request(self, request):
        """
        Checks if different session exists for user and deletes it.
        """
        if request.user.is_authenticated():
            cache = get_cache('default')
            cache_timeout = 86400
            cache_key = "user_pk_%s_restrict" % request.user.pk
            cache_value = cache.get(cache_key)

            if cache_value is not None:
                if request.session.session_key != cache_value:
                    engine = import_module(settings.SESSION_ENGINE)
                    session = engine.SessionStore(session_key=cache_value)
                    session.delete()
                    cache.set(cache_key, request.session.session_key, 
                              cache_timeout)
            else:
                cache.set(cache_key, request.session.session_key, cache_timeout)
Run Code Online (Sandbox Code Playgroud)


Mic*_*nor 3

Django 不提供开箱即用的方法来阻止同一用户帐户的并发会话,而这并不是一件简单的事情。但是,这里还有另一个问题,其中提供了一些有关如何实现此目的的建议:How can IDetecting multiple Logins into a Django Web application from differentlocations?