使用rest-framework-jwt进行身份认证 - 转
原文地址:https://www.jianshu.com/p/02b8350f35c8
python 及 前端配置 :https://earthchen.cn/2017/06/15/django_rest_framework_jwt/
验证方式:
http POST http://erp.nz-soft.com/api/auth/ username=用户名 password=密码
每次获取的token值不同
登陆及访问代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="app">
<div class="container">
<span id="message">{{ msg }}</span>
</div>
<div class="container">
<div class="account-info">
<span v-if="userName">{{ userName }} | <a href="#" @click="logout">注销</a></span>
</div>
</div>
<div class="container">
<div class="form-group">
<label>用户名</label>
<input type="text" v-model="loginModel.username" placeholder="用户名" />
</div>
<div class="form-group">
<label>密码</label>
<input type="text" v-model="loginModel.password" placeholder="密码" />
</div>
<div class="form-group">
<label></label>
<button @click="login">登录</button>
</div>
</div>
<div class="splitter"></div>
<div class="container">
<div class="form-group">
<label></label>
<button @click="callApi">调用API</button>
</div>
<div class="result">
API调用结果:{{ result | json }}
</div>
</div>
</div>
</body>
<script src="js/vue.js"></script>
<script src="js/zepto.js"></script>
<script>
var demo = new Vue({
el: '#app',
data: {
loginUrl: 'http://erp.nz-soft.com/api/auth/',
// loginUrl: 'http://erp.nz-soft.com/survey/authlogin/',
logoutUrl: 'http://erp.nz-soft.com/api/auth/',
apiUrl: 'http://erp.nz-soft.com/api/survey',
loginModel: {
username: '',
password: '',
grant_type: 'password',
},
msg: '',
userName: '',
result: ''
},
ready: function() {
this.userName = sessionStorage.getItem('userName')
},
methods: {
login: function() {
var vm = this
vm.msg = ''
vm.result = ''
$.ajax({
url: vm.loginUrl,
type: 'POST',
dataType: 'json',
data: vm.loginModel,
xhrFields: {
withCredentials: true
},
success: function(data) {
vm.msg = '登录成功!'
vm.userName = data.userName
sessionStorage.setItem('accessToken', data.token)
sessionStorage.setItem('userName', vm.userName)
// vm.msg = sessionStorage.getItem('accessToken')
},
error: vm.requestError
})
},
logout: function() {
var vm = this
vm.msg = ''
vm.result = ''
$.ajax({
url: vm.logoutUrl,
type: 'POST',
dataType: 'json',
success: function(data) {
vm.msg = '注销成功!'
vm.userName = ''
vm.loginModel.username = ''
vm.loginModel.password = ''
sessionStorage.removeItem('userName')
sessionStorage.removeItem('accessToken')
},
error: vm.requestError
})
},
callApi: function() {
var vm = this
vm.msg = ''
vm.result = ''
//注意:jwt后面有个空格 ,jwt 是配合 django 的 rest_framework_jwt
headers = {}
headers.Authorization = 'JWT ' + sessionStorage.getItem('accessToken')
$.ajax({
type: 'get',
dataTye: 'json',
url: vm.apiUrl,
headers: headers,
success: function(data) {
vm.result = data
},
error: vm.requestError
})
},
requestError: function(xhr, errorType, error) {
this.msg = xhr.responseText
}
}
})
</script>
</html>
浙公网安备 33010602011771号