Django-restframework 常用记录(JWT,权限)

 

# js
<script type="text/javascript" src="{% static 'js/jquery.cookie.js' %}"></script>
$(function() {
    $('.fa-upload').on('click', function() {
        
        $('p').css("display","block");

        var file = $("#pemkey")[0].files[0];
        var dict = new FormData();
        dict.append('file', file);
        $.ajax({
            type:"POST",
            url:"/B/middle/index/key/",
            data: dict,
            processData: false,   // jQuery不要去处理发送的数据
            contentType: false,   // jQuery不要去设置Content-Type请求头
            success:function(result){
                if(result.status=="success")
                {
                    var jwt = result.jwt;
                    var jwtv = $.cookie('jwt');
                    console.log(jwt)
                    console.log(jwtv)
                    // $.removeCookie('jwt');
                    $.cookie('jwt', jwt, { expires: 1, path: '/' });
                    window.location.href = "/B/home/"
                    
                }
                else
                {
                    $('p').css("display","block");
                    $('p').html("请上传正确的文件");
                }
            }
        });
        
    });
});
#utils.py

def load_jwt(user):
	rdmstr=""
	for i in range(11):
		rdmstr+=random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')
	token = jwt.encode({
		'exp': datetime.utcnow() + timedelta(minutes=30), #过期时间
		'iat': datetime.utcnow(),					  #发布时间
		'data': {
			'user': user,
			'random':rdmstr
 		}
	}, settings.SECRET_KEY, algorithm='HS256')
	return token.decode("utf-8")


def check_jwt(token):
	if token == None:
		return False
	token = token.encode('utf-8')
	try:
		data = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256']) 
	except:
		return False
	time_m = time.localtime(data["exp"])
	t_time = time.strftime("%Y--%m--%d %H:%M:%S", time_m)
	ntime_m = time.localtime(time.time())
	nt_time = time.strftime("%Y--%m--%d %H:%M:%S", ntime_m)
	if t_time < nt_time:
		return False
	else:
		return data
# views.py

jwt = utils.load_jwt(mykey)
# Authentication.py

import os
class MyAuthenticate_base(BaseAuthentication):

	def authenticate(self, request):
		if "jwt" not in request.COOKIES:
			raise exceptions.AuthenticationFailed('用户认证失败')
		myjwt = request.COOKIES["jwt"]
		yon = utils.check_jwt(myjwt)
		if yon == False:
			raise exceptions.AuthenticationFailed('用户认证失败')
		else:
			mykey = yon["data"]["user"]
			token_obj = UserKey.objects.filter(UserId=mykey).first()  
			if not token_obj:
				raise exceptions.AuthenticationFailed('用户认证失败')
			return (token_obj, token_obj) 

	def authenticate_header(self, request): 
		pass

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值