Аутентифицированные данные отображаются на веб-странице, когда не авторизованы в Django / vue - PullRequest
0 голосов
/ 06 января 2020

У меня есть приложение с 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,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...