Поиск по сайту
Ctrl + K
Вопросы по Nuxt

Как реализовать аутентификацию и авторизацию в приложении Nuxt.js?

Реализация аутентификации и авторизации в приложении на Nuxt.js – важный аспект, позволяющий вам управлять доступом пользователей к различным частям вашего приложения. В этом ответе мы рассмотрим основные шаги для настройки аутентификации и авторизации, используя хранение токенов JWT и сторонний сервис для аутентификации, например, Firebase или Auth0.

Шаг 1: Установка необходимых библиотек

Для работы с аутентификацией вам необходимо установить некоторые пакеты. В нашем примере мы используем axios для выполнения HTTP-запросов.

npm install axios

Шаг 2: Создание плагина для аутентификации

Создайте новый файл в папке plugins (например, auth.js). Этот файл будет содержать логику для управления токеном и аутентификацией.

// plugins/auth.js
export default function ({ $axios, redirect }) {
  // Добавляем интерсептор для добавления токена в заголовки запросов
  $axios.onRequest(config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.common['Authorization'] = `Bearer ${token}`
    }
    return config
  })

  // Проверка аутентификации при доступе к защищенным страницам
  $axios.onError(err => {
    if (err.response.status === 401) {
      localStorage.removeItem('token')
      redirect('/login')
    }
  })
}

Шаг 3: Добавление плагина в Nuxt.js

Чтобы Nuxt.js знал о вашем плагине, добавьте его в nuxt.config.js:

// nuxt.config.js
export default {
  plugins: [
    '~/plugins/auth.js'
  ]
}

Шаг 4: Создание страницы входа

Создайте страницу, позволяющую пользователю вводить свои учетные данные и входить в систему. Например, создайте файл login.vue в папке pages.

<template>
  <div>
    <h1>Вход</h1>
    <form @submit.prevent="login">
      <input v-model="email" type="email" placeholder="Email" required>
      <input v-model="password" type="password" placeholder="Пароль" required>
      <button type="submit">Войти</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    async login() {
      try {
        const response = await this.$axios.$post('https://example.com/api/login', {
          email: this.email,
          password: this.password
        })
        localStorage.setItem('token', response.token)
        this.$router.push('/')
      } catch (error) {
        console.error('Ошибка при входе:', error)
      }
    }
  }
}
</script>

Шаг 5: Защита маршрутов

Далее вам необходимо защищать определенные маршруты, чтобы только аутентифицированные пользователи имели к ним доступ. Это можно сделать с помощью middleware. Создайте middleware-файл, например, auth.js в папке middleware.

// middleware/auth.js
export default function ({ redirect }) {
  if (!localStorage.getItem('token')) {
    return redirect('/login')
  }
}

Теперь добавьте это middleware к нужным страницам:

// pages/protected.vue
<template>
  <div>
    <h1>Защищенная страница</h1>
  </div>
</template>

<script>
export default {
  middleware: 'auth'
}
</script>

Шаг 6: Выход из системы

Не забудьте добавить возможность выхода из системы. Например, это можно сделать в вашем компоненте навигации:

<template>
  <nav>
    <button @click="logout">Выйти</button>
  </nav>
</template>

<script>
export default {
  methods: {
    logout() {
      localStorage.removeItem('token')
      this.$router.push('/login')
    }
  }
}
</script>

Заключение

Теперь вы имеете базовую настройку аутентификации и авторизации в вашем Nuxt.js приложении. Вы можете расширить этот функционал, добавив обработку ошибок, регистрация пользователей и другие функции, необходимые для вашего проекта.

Содержание:
Редактировать