Django中——JWT生成用户身份令牌

一、生成token并返回

import jwt
import datetime
user = User.objects.filter(id=userid)
if user:
	payload = {
		'exp':datetime.datetime.utconutcnow() + datetime.timedelta(days=1),
		'data':{
			'userid':user.userid,
		}
	}
	# 生成token
	token = jwt.encode(payload,SECRET_KEY, algorithm='HS256').decode()
	# 自定义状态码和消息
	USER_LOGIN_SUCCESS = (200001, '用户登录成功')
	# 返回自定义响应
	response = DefaultResponse(*USER_LOGIN_SUCCESS,data={
                'token': token, 'username': user.username, 'realname': user.realname})
else:
	USER_LOGIN_FAILED = (200002, '用户名或密码错误')
	response = DefaultResponse(*USER_LOGIN_FAILED)
	
# 自定义响应
class DefaultResponse(Response):
	def __init__(self, code=100000, message='操作成功',
                 data=None, status=None, template_name=None,
                 headers=None, exception=False, content_type=None):
		_data = {'code': code, 'message': message}
		if data:
			_data.update(data)
		super().__init__(_data, status, template_name,
                         headers, exception, content_type)

二、验证token

class UserLoginAuthentication(BaseAuthentication):
	def authenticate(self,request):
		token = request.META.get('HTTP_TOKEN')
		if token:
			try:
				payload = jwt.decode(token,SECRET_KEY)
				user.id = payload['data']['userid']
				user.is_authenticated = True
				return user,token
			except InvalidTokenError:
				raise AuthenticationFailed('无效的令牌或令牌已过期')
        raise AuthenticationFailed('请提供用户身份令牌')
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值