#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)
Как только я получаю токен, я отправляю пользователя на домашнюю страницу.
Мои вопросы:
-
Является ли то, как я аутентифицирую пользователей, хорошим способом сделать это? Я что-то упускаю из виду? Это первый раз, когда я пытаюсь пройти аутентификацию на том, что я создал, поэтому я хочу сделать это правильно.
-
Как я должен хранить этот токен? Что такое «лучшая практика», когда дело доходит до удостоверений подлинности? Я думал о передаче токена каждому компоненту, который в нем нуждается. Я также заглянул в использование localStorage, но опять же не уверен, что делает большинство людей в таких ситуациях.
Любая помощь, которую вы все можете предоставить, будет высоко оценена!
Заранее спасибо!