У меня есть приложение с Django и Nuxt js, которое использует express сессий и redis для хранения токенов сессий.
Я пытаюсь добавить страницу с данными из моего бэкэнда, которая будет отображается только если пользователь аутентифицирован. По какой-то причине это не работает. Данные отображаются, когда я вышел из системы даже после нескольких обновлений.
Вот мой код.
Django / Views.py
class OrdersViewSet(mixins.ListModelMixin,
viewsets.GenericViewSet,
mixins.RetrieveModelMixin
):
queryset = Orders.objects.all().order_by('-time_stamp')
serializer_class = OrdersSerializer
permission_classes= [permissions.IsAuthenticated]
webpage.hmtl
<template>
<div class="course-list-row">
<table>
<thead id="header-fixed">
<th scope="col">Time Stamp</th>
</thead>
</table>
<tbody>
<tr v-for="row in orders" :key="row.id">
<td style="width:5px">{{ row.time_stamp }}</td>
<td style="width:5px">{{ row.event_name }}</td>
</tr>
</tbody>
</div>
</template>
<script>
export default {
async asyncData({ app }) {
try {
const res = await app.$axios.get("api/orders/");
return {
orders: res.data.results,
error: false
};
} catch (e) {
console.log("error", e);
return {
orders: [],
error: true
};
}
}
};
</script>
store. js
export default {
state: () => ({
loggedIn: false,
user: null
}),
actions: {
async nuxtServerInit ({ commit }, { req, app }) {
console.log('nuxtServerInit', req.session.authToken)
if (req.session.authToken) {
const data = await app.$axios.$get('/api/auth/me/')
commit('SET_USER', data)
} else {
commit('SET_USER', null)
}
},
async login ({ commit }, creds) {
await this.$axios.$post('/auth/login/', creds)
const data = await this.$axios.$get('/api/auth/me/')
commit('SET_USER', data)
},
logout ({ commit }) {
this.$axios.$post('/auth/logout/')
commit('SET_USER', null)
},
load_runner ({ commit }, runner) {
commit('SET_RUNNER', runner)
},
},
mutations: {
SET_USER (state, user) {
if (user) {
state.loggedIn = true
state.user = user
} else {
state.loggedIn = false
state.user = null
}
},
SET_RUNNER (state, runner) {
if (runner) {
state.filtered = true
state.runner = runner
} else {
state.filtered = false
state.runner = null
}
}
}
}
Djangosettings.py
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework.authentication.BasicAuthentication",
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.TokenAuthentication",
),
"DEFAULT_PERMISSION_CLASSES": (
"rest_framework.permissions.IsAuthenticated",
),
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
"PAGE_SIZE": 100,
}