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

标签 django django-authentication

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

它应该防止使用相同的用户名和密码在不同的机器上多次登录。我如何在 Django 中实现这一点?

我们必须牢记以下几点:

  • 如果用户关闭浏览器而不退出
  • 如果 session 超时
  • 最佳答案

    你可以试试这个,它会注销第一个用户并登录第二个用户。在您的应用程序目录中添加 middleware.py(与模型、 View 等相同的级别)并添加此代码。当同一个人使用多个设备时很有用。确保将其添加到中间件类中:'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)
    

    关于Django 如何防止多个用户使用相同的凭据登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408823/

    相关文章:

    Python 尝试 block 大小

    django - 如何在 PyCharm 中禁用只读项目文件?

    python - Django Compressor 无法在生产环境中运行

    python - 是否可以在任务执行期间使用 django-celery-results 查询 celery 任务的状态?

    django - 在 Django 中实现多个管理级别

    python - 在 Django 中扩展 AbstractUser 的正确方法?

    django - 如何在 django 中将按钮添加到 "submit_row"上下文

    python - Django:删除管理员用户更改表单中的 "view on site"按钮

    python - 在 Django 项目中使用 request.user.is_authenticated()

    python - 获取 `django-registration` 将您带到您最初尝试访问的页面