Django 自定義生成中間件
生成jwt
class LoginAPIVIew(APIView):
# 登錄
def post(self,request):
username = request.data.get('username')
password = request.data.get('password')
user = Admin_user.objects.filter(username=username).first()
if user and check_password(password,user.password):
token = jwt.encode({'data':{'userid':user.id,'username':user.username,'pic':user.pic}},settings.SECRET_KEY,algorithm='HS256')
return Response({'msg':'登錄成功','code':200,'username':user.username,'pic':user.pic,'userid':user.id,'token':token,})
else:
return Response({'msg':'賬號或密碼錯誤'})
驗證token
自定義中間件,新建一個token_middleware.py
class TokenMiddleware(MiddlewareMixin):
def process_request(self,request):
# 1.獲取到url =request.get_full_path() http://localhsot:32r4/sadmin/test/
url = request.get_full_path()
# 2.定義一個白名單 list=['/sadmin/login','/sadmin/reg']
list=['/sadmin/login/','/sadmin/reg/']
# 3.判斷 url not in list:
if url not in list:
# 4.獲取token jwttoken 認證去認證
token = request.META.get('HTTP_AUTHORIZATION')
#4.1決議驗證
if token:
#解決原來的token
s = jwt.decode(token, settings.SECRET_KEY,algorithms=['HS256'])
#重新生成token
newtoken = jwt.encode({'data':s},settings.SECRET_KEY,algorithm='HS256')
if token == newtoken:
return None
return HttpResponse(401)
return None
# 4.通過return None
# 6.不能過 httpResponse('401')
Settings.py中配制
子應用名.檔案名.型別
'sadmin.token_middeware.TokenMiddleware'
vue請求
var token = localStorage.getItem('token')
this.axios.get('sadmin/test/',{headers: { "Authorization": token }}).then(res=>{
if(res.data == 401){
alert('登錄后訪問')
}
})
攔截器
#interceptors main.js
axios.interceptors.request.use(
config => {
if(localStorage.getItem('token')){
config.headers['Authorization'] = localStorage.getItem('token');
}
return config;
},
error => {
return Promise.reject(error.response);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296963.html
標籤:其他
下一篇:js判斷資料型別
