Внутренняя аутентификация Django с помощью формы интерфейса NextJS — лучшие практики

#reactjs #django #django-rest-framework #next.js

#reactjs #django #django-rest-framework #next.js

Вопрос:

У меня есть API-хаб, который я построил в Django, и интерфейсное приложение, которое я построил в NextJS. В настоящее время я работаю над аутентификацией в API Django в Nextjs, и мне интересно узнать о лучших практиках.

В настоящее время приложение NextJS отправляет имя пользователя / пароль пользователя в конечную точку. Эта конечная точка либо возвращает токен пользователя, либо ошибку, иллюстрирующую проблему.

Реагировать

   const login = async () => {
    let token = await axios.post('/api/accounts/', {
      email: email,
      password: password
    }).then(r => r.data.token).catch(function (error) { console.log(error) })

      if (token) {
        router.push({
            pathname: '/home/',
            query: { token: token },
          })
        }
      }
  

сервер nexjs api/accounts

 export default async (req, res) => {
  if (req.method === 'POST') {
    try {
      // retrieve payment intent data
      const {data} = await axios.post('https://website/api/api-token-auth/', req.body)
      res.status(200).send(data)
    } catch (err) {
      res.status(500).json({ statusCode: 500, message: err.message })
    }
  } else {
    res.setHeader('Allow', 'POST')
    res.status(405).end('Method Not Allowed')
  }
}
  

Django API

 @csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def obtain_auth_token(request):
    email = request.data.get("email")
    password = request.data.get("password")
    if email is None or password is None:
        return Response({'error': 'Please provide both email and password'},
                        status=HTTP_400_BAD_REQUEST)
    user = authenticate(email=email, password=password)
    if not user:
        return Response({'error': 'Invalid Credentials'},
                        status=HTTP_404_NOT_FOUND)

    token, _ = Token.objects.get_or_create(user=user)
    return Response({'token': token.key},
                    status=HTTP_200_OK)
  

Как только я получаю токен, я отправляю пользователя на домашнюю страницу.

Мои вопросы:

  1. Является ли то, как я аутентифицирую пользователей, хорошим способом сделать это? Я что-то упускаю из виду? Это первый раз, когда я пытаюсь пройти аутентификацию на том, что я создал, поэтому я хочу сделать это правильно.

  2. Как я должен хранить этот токен? Что такое «лучшая практика», когда дело доходит до удостоверений подлинности? Я думал о передаче токена каждому компоненту, который в нем нуждается. Я также заглянул в использование localStorage, но опять же не уверен, что делает большинство людей в таких ситуациях.

Любая помощь, которую вы все можете предоставить, будет высоко оценена!

Заранее спасибо!