码迷,mamicode.com
首页 > 其他好文 > 详细

单用户登录

时间:2020-08-20 18:48:13      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:字段   lan   jwt   ica   now()   str   first   成功   用户登陆   

单用户登陆

session

参考

  • 登录

方法一

从记录session的数据库中删除之前用户的的所有记录

login(request, user) #登录成功
# 登录之后获取获取最新的session_key
session_key = request.session.session_key
# 删除非当前用户session_key的记录
for session in Session.objects.filter(~Q(session_key=session_key), expire_date__gte=timezone.now()):
    data = session.get_decoded()
    if data.get(‘_auth_user_id‘, None) == str(request.user.id):
        session.delete()

方法二

建立user扩展表,增加session_key字段记录user登录信息

username = request.POST.get("username")
password = request.POST.get("password")
authenticated_user = authenticate(username=username, password=password)
if authenticated_user:
    # 找到登录的user对象
    user_obj = UCenter.objects.filter(userid=authenticated_user) 
    # 获取登录对象的session_key
    is_session_key = user_obj.first().session_key  
    if is_session_key:  # 用户已登录
        # 删除django-session表中登录前面登录用户的session_key
        request.session.delete(is_session_key)  
    # 用户信息存入session
    auth_login(request, authenticated_user)  
    # 更新新user扩展表中登录user的session_key         
    user_obj.update(session_key=request.session.session_key)  
    return redirect(‘/index/‘)
else:
    return redirect(‘/accounts/login/‘)

若有推送机制,则在登录后,推送至旧的设备上,提示用户已经再次登录,旧登录失效。

  • 访问

使用正常的cookie-session验证,由于session_key的唯一性,当新用户登录后,就用户就无法继续使用之前的session_key.

JWT

  • 登录

每个用户登录后,在redis中存储用户的jwt_token。key是user_id,value是用户最新的token

当新用户登录后,更新redis中存储用户的 token

若有推送机制,则在登录后,推送至旧的设备上,提示用户已经再次登录,旧登录失效。

  • 访问

访问时,解码jwt_token后,校验传输的token是否是redis中存储的值。若是,则是新用户,若不是,则是之前的jwt_token

单用户登录

标签:字段   lan   jwt   ica   now()   str   first   成功   用户登陆   

原文地址:https://www.cnblogs.com/fhkankan/p/13522703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!