django - 尽管输入了令牌,但无法访问 API
问题描述
我有一个只能通过传递 JWT 令牌访问的 API。我在 Django 中使用Simple-JWT库。此外,我已将此令牌存储在我的 localStorage 中,并通过 Ajax 在我的视图模块中获取它。我使用 GET 方法创建了一个 API,它应该从模型中检索某些数据。但是,当通过 Python 中的 Requests 模块访问 API URL 时,它仍然说没有提供身份验证凭据。请参阅下面的代码:
模型.py:
class Mymodel(models.Model):
emp= models.ForeignKey(User, on_delete = models.CASCADE)
entry_time = models.DateTimeField()
视图.py:
def get_time(request):
if (request.method == 'GET'):
tk = request.GET.get('token') #from AJAX
headers = {'Authorization': 'JWT {}'.format(tk), 'content-type': "application/json",}
url = 'http://127.0.0.1:8000/secret_api/'
response = requests.get(url, headers = headers)
if response:
print("success")
return HttpResponse(response)
class MyAPI(generics.ListAPIView):
permission_classes = [IsAuthenticated]
def get(self, request, format = None):
user_id = User.objects.get(username=request.GET.get('username')).pk
user = User.objects.get(id = user_id)
if not Mymodel.objects.filter(emp=user).exists():
current_time = timezone.now()
time = Mymodel.objects.create(emp=user, entry_time=current_time)
data = time.entry_time
return data #returns time
AJAX 调用:
$.ajax({
cache: false,
url: {% url 'get_time' %}, #points to the get_time function
type: 'GET',
data: {username: username, token: token},
success: function(data) {
$("#time").html(data);
}
但是,在执行 get_time 函数时,我收到此错误:
{"detail": "Authentication credentials were not provided."}
当我从以下位置更改标题时:
headers = {'Authorization': 'Bearer {}"'.format(tk)}
我收到此错误:
{"detail":"Given token not valid for any token type","code":"token_not_valid","messages":[{"token_class":"AccessToken","token_type":"access","message":"Token is invalid or expired"}]}
我 100% 肯定从 AJAX 传递的令牌是正确的。我哪里错了?
解决方案
你检查了你的settings.py。确保输入正确的令牌到期时间。
在你的 settings.py
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': datetime.timedelta(days=15),
'REFRESH_TOKEN_LIFETIME': datetime.timedelta(days=15),
}
确保python manage.py migrate
在更改后点击并重新启动 django 服务器。
推荐阅读
- ios - 斯威夫特:可解码
- javascript - 反应语义UI按钮悬停
- excel - 保存工作簿的 vba 脚本覆盖输入的文件名
- vuetify.js - v-date-picker 上的默认年份视图
- r-markdown - Rmarkdown 中的 Bibtex - 第二作者的名字和姓氏在引用中交换
- pyomo - 在 Pyomo 中创建 if..then 类型规则(约束)
- javascript - Angular 6 - 上传文件
- sql-server - 从 temptable 查看数据
- java - 是否存在用于使用 AWS SDK InitiateAuth 的骆驼组件?
- mysql - 基于从几个表中选择的另一个选择