Разрешить вход для неподтвержденных аккаунтов в Strapi

Вопрос или проблема

Разрешить вход для неподтвержденных аккаунтов в Strapi

Я пытался позволить пользователям, которые не подтвердили свои электронные письма, входить в систему с помощью Strapi.

Я использую Strapi4 и Nuxt3, если это может помочь. Я пробовал использовать политики и расширения, но без успеха.

Кто-нибудь когда-нибудь добивался этого? Я не смог найти ничего в документации.

Заранее большое спасибо.

Ответ или решение

Чтобы разрешить пользователям, которые не подтвердили свои учетные записи, входить в систему в Strapi 4, вам потребуется внести некоторые изменения в код вашего проекта. По умолчанию Strapi требует подтверждения электронной почты перед входом, но вы можете переопределить это поведение с помощью пользовательских политик и настроек.

Вот пошаговая инструкция, как это сделать:

Шаг 1: Создание пользовательской политики

  1. Перейдите в директорию вашего Strapi проекта и создайте новую политику. Для этого выполните команду ниже:

    cd /путь/к/вашему/проекту
    mkdir -p src/policies
    touch src/policies/allow-non-confirmed.js
  2. Откройте файл allow-non-confirmed.js и добавьте следующий код:

    module.exports = async (ctx, next) => {
     // Получение идентификационных данных
     const { identifier, password } = ctx.request.body;
    
     // Получение пользователя по идентификатору
     const user = await strapi.query('plugin::users-permissions.user').findOne({
       where: { 
         OR: [
           { email: identifier },
           { username: identifier }
         ]
       },
     });
    
     // Проверка существования пользователя
     if (user) {
       // Проверка пароля
       const matched = await strapi.plugins['users-permissions'].services.user.validatePassword(password, user);
    
       if (matched) {
         // Разрешаем входа даже если email не подтвержден
         ctx.user = user;
         return await next();
       }
     }
    
     // В случае неудачи — возвращаем ошибку
     ctx.unauthorized('Invalid identifier or password');
    };

Шаг 2: Настройка маршрутов

  1. Теперь вам необходимо изменить маршруты аутентификации, чтобы использовать только что созданную политику. Для этого откройте файл config/routes.json или соответствующий файл маршрутов для вашего плагина пользователей.

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

    {
     "method": "POST",
     "path": "/auth/local",
     "handler": "auth.local",
     "config": {
       "policies": ["global::isAuthenticated"],
       ...
     }
    }
  3. Измените раздел policies, добавив свою политику:

    {
     "method": "POST",
     "path": "/auth/local",
     "handler": "auth.local",
     "config": {
       "policies": ["global::allow-non-confirmed"],
       ...
     }
    }

Шаг 3: Обновление конфигурации

Если у вас есть дополнительные проверки на уровне конфигурации для аутентификации, убедитесь, что они также допускают пользователей с неподтвержденными учетными записями.

Шаг 4: Тестирование

После внесения изменений внимательно протестируйте процесс входа в систему с непросмотренными учетными записями, чтобы убедиться, что все работает корректно.

Заключение

С помощью этих шагов вы сможете разрешить пользователю, не подтвердившему свою учетную запись, входить в систему в Strapi 4. Обратите внимание, что это может привести к потенциальным проблемам безопасности, так что убедитесь, что у вас есть механизм для уведомления пользователей о необходимости подтверждения их электронной почты и для защиты от злоупотреблений.

Оцените материал
Добавить комментарий

Капча загружается...