使用 Django 信号识别当前用户会话

用户10000033

我想使用 django 信号来识别用户是否登录了两次,如果是,则撤销他的第一个会话,以便一次只能出现一个用户会话。

我使用了以下示例,但似乎我的signals.py 甚至没有被重新识别,我不知道为什么。

示例:如何在 Django 中防止多次登录

帐户/信号.py

from django.contrib.auth import user_logged_in
from django.dispatch.dispatcher import receiver
from django.contrib.sessions.models import Session
from .models import UserSession


@receiver(user_logged_in)
def remove_other_sessions(sender, user, request, **kwargs):
    # remove other sessions
    Session.objects.filter(usersession__user=user).delete()

    # save current session
    request.session.save()

    # create a link from the user to the current session (for later removal)
    UserSession.objects.get_or_create(
        user=user,
        session=Session.objects.get(pk=request.session.session_key)
    )

帐户/模型.py

# Model to store the list of logged in users
class UserSession(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    session = models.OneToOneField(Session, on_delete=models.CASCADE)

帐户/应用程序.py

from django.apps import AppConfig



class AccountsConfig(AppConfig):
    name = 'Accounts'

    def ready(self):
        import Accounts.signals

但由于某种原因,该表的数据库中没有写入任何内容。

我可能会在这里错过一些东西吗,这是我第一次接触信号,所以我可能会错过配置中的一些东西。

沙克莫德

试试这个,

default_app_config = 'Accounts.apps.AccountsConfig'

在 apps.py 文件目录的 __init__.py 文件中添加这一行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章