Пользовательская аутентификация в Django Rest Framework
У меня есть приложение на базе django rest framework с реализованной схемой аутентификации. Теперь я хочу разрешить внешнему приложению вызывать некоторые методы моего приложения. Есть конечная точка для входа внешнего приложения /external-app-login, которая реализована следующим образом:
class ExternalAppLoginView(views.APIView):
def post(self, request):
if request.data.get('username') == EXTERNAL_APP_USER_NAME and request.data.get('password') == EXTERNAL_APP_PASSWORD:
user = models.User.objects.get(username=username)
login(request, user)
return http.HttpResponse(status=200)
return http.HttpResponse(status=401)
Теперь я хочу добавить аутентификацию. Я реализовал это следующим образом:
class ExternalAppAuthentication(authentication.SessionAuthentication):
def authenticate(self, request):
return super().authenticate(request)
Но аутентификация все время не проходит. Как правильно это сделать? Я хочу хранить логин/пароль внешнего приложения в переменных в приложении, а не в базе данных.
Аутентификация не проходит, потому что для аутентификации необходимо вернуть зарегистрированного пользователя в вашей базе данных. Однако, поскольку информация о пользователе находится в переменных, а не в базе данных, возникает проблема.
Есть несколько способов решить эту проблему. Во-первых, я бы предложил вам написать код аутентификации вместо того, чтобы использовать
return super().authenticate(request)
, так как это приведет вас к истинной причине проблемы.
Также необходимо прочитать эту ссылку на документацию, она проясняет многие вещи, касающиеся аутентификации.
https://www.django-rest-framework.org/api-guide/authentication/
Теперь, после того как вы сделали все это, и вы ищете способы аутентификации, вы можете попробовать либо аутентификацию удаленного пользователя, либо проверить существующих пользователей в ваших переменных и использовать анонимного пользователя для аутентификации, что решит проблему.