Я просто не знаю, как получить этот пароль пользователя взамен, поэтому я могу реализовать логику bcrypt.compare в форме входа.
Для регистрации я использую следующую логику и конечную точку:
Я пробовал так:
Думаю, мне нужно как-то изменить контроллеры и создать собственную конечную точку для получения этих данных из Strapi, но я не нашел никакой информации, связанной с этим, и вообще этого не делал.
Мне тоже не удалось найти эту информацию, потому что кажется, что все хотят сменить свой пароль, и мне не нужно его менять, я просто хочу вернуть этот хеш, чтобы я мог его сравнить, вот и все.
Кажется, мне придется создать контроллер в Strapi, который я смогу вызвать для проверки пароля пользователя (передайте пользователя - он найдет его - проверьте - ответ). Я думаю, потому что возвращение пароля вперед связано с проблемой безопасности. Но тогда вопрос, как создать этот контроллер? Если у вас есть предложения, как мне получить этот пароль для моей логики — я буду рад это увидеть.
"@strapi/strapi": "^4.21.1",
import { NextResponse } from 'next/server'
import { z } from 'zod'
import isEmail from 'validator/lib/isEmail'
import { comparePassword } from '@/utils/password-compare'
import { Codes } from '@/constants/code-errors'
export async function POST(request) {
try {
const { email, password } = await request.json()
const saltRounds = 10;
// http://localhost:8080/api/auth/local
// const response = await fetchBackendAPI({
// resource: '/api/admin/login',
// method: 'POST',
// fields: nonEmptyFields
// })
const emailCheck = z.string().refine(isEmail)
if (!emailCheck.safeParse(email).success) {
return NextResponse.json({ message: "Email is incorrect." }, { status: 404 });
}
const hashResult = await comparePassword(password, saltRounds)
if (hashResult !== false) {
// Save hashed password
} else {
// Error handling
}
const response = await fetch(`${process.env.REACT_APP_API_ENDPOINT}/api/auth/local`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
identifier: email,
password: hashResult,
})
})
if (response.ok) {
console.info("User was logged")
const newUser = await response.json();
return NextResponse.json({ newUser }, { status: 200 });
} else {
console.info("Response is not ok")
return NextResponse.json({
code: response.status,
message: response.statusText
}, { status: response.status })
}
} catch (err) {
return NextResponse.json({
code: Codes.INTERNAL_SERVER_ERROR.code,
err: Codes.INTERNAL_SERVER_ERROR.message
}, { status: 500 })
}
}
ОБНОВЛЯТЬ:
Поскольку я так старался просмотреть всю информацию, связанную с моими темами, я нашел на YT официальное видео, например, как делать контроллеры, вот что я создал.
module.exports = {
routes: [
{
method: 'GET',
path: '/custom',
handler: 'todo.customAction',
config: {
auth: false
}
}
]
}
use strict';
/**
* todo controller
*/
const { createCoreController } = require('@strapi/strapi').factories;
modul
e.exports = createCoreController('api::todo.todo', ({ strapi }) => ({
async customAction (ctx) {
try {
const user = await strapi.query('user', 'users-permissions').findOne({ username: 'Magister4'})
} catch (err) {
ctx.body = err
}
}
}))
И это вроде как сработало, но мне не удалось найти, вернуть или сменить пароль. Кажется, todo.todo не имеет доступа к основным правам пользователей.





Чтобы сгенерировать новый контроллер в новом API, вы можете просто запустить «Yarn Strapi Generate» в своем проекте Strapi.
Затем просто раскомментируйте маршрут и контроллер.
Затем используйте эту строку для получения пользовательских данных
await strapi.db.query('plugin::users-permissions.user').findOne({
where: { email: email }
})
Установите новый маршрут Public, чтобы иметь возможность доступа к нему без авторизации.
Вот процесс в видео, которое я сделал для вас: https://www.loom.com/share/cf60dafff14840c886c6d222530f557b
Великий. Не заметил, извините за мой мозг, пока это плохо :D Но на самом деле я решил это по-другому, похоже, что Strapi удалил hashPassword из реальных методов, они все еще используют его под капотом. Например, когда вы создаете пароль — он уже хешируется на стороне Strapi, поэтому нам на самом деле не нужно об этом беспокоиться, а затем — мне не нужен пароль для hashCompare, потому что Strapi также делает это. Итак, я просто устанавливаю базовую аутентификацию, и она работает. Но ваше решение - это то, что я искал. И еще спасибо за ткацкий станок, спасибо за ваше время и объяснения!
эй @AndreyShaposhnikov, можешь рассказать метод, который ты использовал, я тоже застрял в такой же ситуации
@ShubhamSinghvi, эй, просто посмотри видео, которое снял выше соучастник STRAPI. Это буквально 1 ответ здесь, вы не можете его пропустить. Это то, что вам нужно, чтобы получить пароль. Я не решал этого далеко, потому что понял, что мне НЕ нужен ПАРОЛЬ для сравнения с хешем, потому что Strapi проверяет его САМ, когда вы пытаетесь ВОЙТИ в систему. Но если вам НУЖЕН ПАРОЛЬ для чего-то другого — посмотрите схему выше.
@AndreyShaposhnikov да, спасибо, я смотрел видео 2...3 раза, у меня были ошибки, потом я понял, что моя проблема не такова, после того, как я обнаружил раздел провайдеров Google и после многих несовпадений URL-адресов ... я наконец закончил делать вход в Google и индивидуальный вход пользователя :)
Я не понимаю, что вы пытаетесь сделать? Вы пытаетесь воссоздать функцию сброса пароля? Потому что в Strapi есть такая встроенная функция 🤓