【问题标题】:How to forced logout a user when sessions stored in cache?当会话存储在缓存中时如何强制注销用户?
【发布时间】:2017-01-27 14:13:14
【问题描述】:

在某些情况下,我想让工作人员踢出一些用户。 我的 django 1.8 站点将会话存储在 redis 中。

在我看来我试过this solution

#will be removed in 1.9 
from django.utils.importlib import import_module 

@staff_member_required 
def kickout_user(request, username):    

    u = User.objects.get(username = username)

    SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
    active_users = Request.objects.active_users(seconds=60)
    active_users_ids = [user.id for user in active_users]
    for session in stored_sessions:
            SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
            s = SessionStore(session_key=session.session_key)
            session_uid = session.get_decoded().get('_auth_user_id')
            print 'session', session_uid
            if session_uid == u.id:
                print 'session going to be deleted for uid:',  session_uid
                session.delete()
                print  ' session deleted'+ u.username

但它给出了这个错误:

global name 'Request' is not defined

还有一些建议here,但它们要么有缺陷,要么基于编写额外的中间件,我觉得这些中间件有点矫枉过正,并试图避免。

【问题讨论】:

  • 是否在views.py 函数中要注销用户?如果是这样,您可以logout(request)
  • 是的,它在视图中,但在这种情况下,reques.user 是员工,而不是将被踢出的用户。我更新了我的问题以澄清这一点。
  • another question 介绍了如何注销所有用户。您也许可以调整它以注销特定用户。
  • @Travis,请查看我的更新答案。
  • 查看您所指的问题,看来您需要django-request 才能使Request.objects.active_users(seconds=60) 工作。

标签: django django-sessions


【解决方案1】:

你可以试试django-force-logout

也可以访问this_link 以获得更多帮助

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2011-06-26
    • 2015-03-29
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多