ฉันเขียนสิ่งนี้ในมุมมอง ajax แต่เป็นคำตอบที่กว้างขวางยิ่งขึ้นโดยให้รายชื่อผู้ใช้ที่ลงชื่อเข้าใช้และออกจากระบบแล้ว
is_authenticated
แอตทริบิวต์เสมอผลตอบแทนTrue
สำหรับผู้ใช้ของฉันซึ่งฉันคิดว่าคาดว่านับตั้งแต่การตรวจสอบเฉพาะสำหรับ AnonymousUsers แต่ที่พิสูจน์ไร้ประโยชน์หากคุณกำลังจะบอกว่าการพัฒนาแอปแชทที่คุณจำเป็นต้องเข้าสู่ระบบผู้ใช้แสดง
การตรวจสอบนี้จะตรวจสอบเซสชันที่หมดอายุแล้วดูว่าผู้ใช้รายใดเป็นสมาชิกตาม_auth_user_id
แอตทริบิวต์ที่ถอดรหัส:
def ajax_find_logged_in_users(request, client_url):
"""
Figure out which users are authenticated in the system or not.
Is a logical way to check if a user has an expired session (i.e. they are not logged in)
:param request:
:param client_url:
:return:
"""
# query non-expired sessions
sessions = Session.objects.filter(expire_date__gte=timezone.now())
user_id_list = []
# build list of user ids from query
for session in sessions:
data = session.get_decoded()
# if the user is authenticated
if data.get('_auth_user_id'):
user_id_list.append(data.get('_auth_user_id'))
# gather the logged in people from the list of pks
logged_in_users = CustomUser.objects.filter(id__in=user_id_list)
list_of_logged_in_users = [{user.id: user.get_name()} for user in logged_in_users]
# Query all logged in staff users based on id list
all_staff_users = CustomUser.objects.filter(is_resident=False, is_active=True, is_superuser=False)
logged_out_users = list()
# for some reason exclude() would not work correctly, so I did this the long way.
for user in all_staff_users:
if user not in logged_in_users:
logged_out_users.append(user)
list_of_logged_out_users = [{user.id: user.get_name()} for user in logged_out_users]
# return the ajax response
data = {
'logged_in_users': list_of_logged_in_users,
'logged_out_users': list_of_logged_out_users,
}
print(data)
return HttpResponse(json.dumps(data))