Вопрос или проблема
Разрешить вход для неподтвержденных аккаунтов в Strapi
Я пытался позволить пользователям, которые не подтвердили свои электронные письма, входить в систему с помощью Strapi.
Я использую Strapi4 и Nuxt3, если это может помочь. Я пробовал использовать политики и расширения, но без успеха.
Кто-нибудь когда-нибудь добивался этого? Я не смог найти ничего в документации.
Заранее большое спасибо.
Ответ или решение
Чтобы разрешить пользователям, которые не подтвердили свои учетные записи, входить в систему в Strapi 4, вам потребуется внести некоторые изменения в код вашего проекта. По умолчанию Strapi требует подтверждения электронной почты перед входом, но вы можете переопределить это поведение с помощью пользовательских политик и настроек.
Вот пошаговая инструкция, как это сделать:
Шаг 1: Создание пользовательской политики
-
Перейдите в директорию вашего Strapi проекта и создайте новую политику. Для этого выполните команду ниже:
cd /путь/к/вашему/проекту mkdir -p src/policies touch src/policies/allow-non-confirmed.js
-
Откройте файл
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: Настройка маршрутов
-
Теперь вам необходимо изменить маршруты аутентификации, чтобы использовать только что созданную политику. Для этого откройте файл
config/routes.json
или соответствующий файл маршрутов для вашего плагина пользователей. -
Найдите маршрут, который соответствует аутентификации пользователей. Например, это может выглядеть так:
{ "method": "POST", "path": "/auth/local", "handler": "auth.local", "config": { "policies": ["global::isAuthenticated"], ... } }
-
Измените раздел
policies
, добавив свою политику:{ "method": "POST", "path": "/auth/local", "handler": "auth.local", "config": { "policies": ["global::allow-non-confirmed"], ... } }
Шаг 3: Обновление конфигурации
Если у вас есть дополнительные проверки на уровне конфигурации для аутентификации, убедитесь, что они также допускают пользователей с неподтвержденными учетными записями.
Шаг 4: Тестирование
После внесения изменений внимательно протестируйте процесс входа в систему с непросмотренными учетными записями, чтобы убедиться, что все работает корректно.
Заключение
С помощью этих шагов вы сможете разрешить пользователю, не подтвердившему свою учетную запись, входить в систему в Strapi 4. Обратите внимание, что это может привести к потенциальным проблемам безопасности, так что убедитесь, что у вас есть механизм для уведомления пользователей о необходимости подтверждения их электронной почты и для защиты от злоупотреблений.