我一直在学习如何通过不同的博客帖子和youtube视频使用djangorestframework令牌认证。 作为参考,我在这里关注博客:https://chrisbartos.com/articles/how-to-implement-token-authentication-with-django-rest-framework/
我无法理解在访问任何页面之前我们将如何检查令牌。我的意思是,我正在开发一个应用程序,该应用程序公开了用户通过其余框架创建的任务。我添加了一个登录名,该登录名可以保存用户并返回为该人创建的令牌。现在,我想检查该令牌以找到该人创建的todos api,并在我的浏览器中以单独的网址查看它。 举个例子: 通过localhost:8000 / api / v1 / login登录后, 我应该以json rest api格式在api / v1 / todos处获得由我创建的待办事项。 而且,如果我转到api / v1 / todos / 1 /,它应该给我详细的待办事项,就像我在序列化程序中创建的一样。
我想添加更多信息: 因此,假设我已经为登录表单创建了一个类。它将为我创建一个令牌。 因此,以下是视图中的登录名:
def signin(request):
username = password = ''
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
return HttpResponse('Logged In')
else:
return HttpResponse('Wrong credentials')
return render(request,'login.html')
因此,我想为此创建一个令牌。如djangorestframework文档https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication中所述 它创建了一个单独的视图来访问从功能get_auth_token获得的api-auth-token。但是,如何应用此功能在基于类的视图中保存当前登录的令牌。 另外,如何在另一个基于类的视图中传递此信息,以防万一我未登录但在通过身份验证时在json中提供给我api的情况下不显示身份验证?
答案 0 :(得分:0)
https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication
在Django rest_framework.authentication.TokenAuthentication
文件的DEFAULT_AUTHENTICATION_CLASSES
选项的REST_FRAMEWORK
中向settings.py
添加rest_framework.authtoken
。
将INSTALLED_APPS
添加到settings.py
中的@authentication_classes
您可以在要保护的视图之前使用@authentication_classes((TokenAuthentication,))
def sample_function(request):
装饰器,如下所示:
{{1}}
您还需要为用户创建令牌,该令牌记录在该初始链接中。
答案 1 :(得分:0)
class loginview(APIView):
permission_classes = [
permissions.AllowAny # Anyone can Login
]
def post(self,request):
email_address = request.data.get('email')
user_request = get_object_or_404(
User,
email=email_address,
)
username = user_request.username
password = request.data.get("password")
user = authenticate(username=username, password=password)
id_u = user.id
if not user:
return Response({"error": "Login failed"},
status=status.HTTP_401_UNAUTHORIZED)
token, _ = Token.objects.get_or_create(user=user)
return Response({"token": token.key,'id':id_u})
以下是示例代码,您可以在使用来自应用程序前端的Login API时获取令牌。可以从令牌模型访问身份验证令牌。不要忘记添加
from rest_framework.authtoken.models import Token
还将rest_framework.authtoken
添加到settings.py
中的已安装应用中