Как реализовать токен аутентификацию перед просмотром? - PullRequest
0 голосов
/ 14 декабря 2018

Я изучаю, как использовать аутентификацию токена djangorestframework, используя различные посты в блоге и видео на YouTube.Что касается ссылки, я следил за блогом здесь: https://chrisbartos.com/articles/how-to-implement-token-authentication-with-django-rest-framework/

Я не мог понять, как мы собираемся проверять токен перед доступом к какой-либо странице.Я имею в виду, я занимаюсь разработкой приложения, которое отображает задачи, которые пользователь создает с помощью остальной среды.Я добавил логин, который сохраняет пользователя и возвращает токен, созданный для этого человека.Теперь я хочу проверить этот токен, чтобы найти API todos, которые он создал, и просмотреть его в моем браузере в отдельном URL.Например: как только я войду в систему через localhost: 8000 / api / v1 / login, я должен получить созданные мной задачи в api / v1 / todos в формате json rest api.И если я зайду в api / v1 / todos / 1 /, он должен дать мне подробную информацию о todo, как я создал в сериализаторах.

Я хотел бы добавить еще немного информации: Так, скажем,Я создал класс для формы входа.Это создаст маркер для меня.Итак, следующий логин в представлениях:

    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 , оно создает отдельное представление для доступа к api-auth-токену, полученному из функции receive_auth_token,Но как мне применить эту функцию, чтобы сохранить токен от текущего имени входа в представлении на основе классов.Кроме того, как передать это в другое представление на основе классов, чтобы оно не показывало аутентификацию в случае, если я не вошел в систему, но дает мне API в json при аутентификации?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018
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})

Вот пример кода, который вы можете использовать для получения токена при использовании API входа из внешнего интерфейса приложения.Доступ к Auth Token возможен из модели Token.Не забудьте добавить

    from rest_framework.authtoken.models import Token

Также добавьте rest_framework.authtoken к установленным приложениям в settings.py

0 голосов
/ 14 декабря 2018

https://www.django -rest-framework.org / api-guide / authentication / # tokenauthentication

Добавьте 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):

Вам также необходимо создать токены для своих пользователей, что описано в этой исходной ссылке.

...