Как получить пароль пользователя от Strapi?

Я просто не знаю, как получить этот пароль пользователя взамен, поэтому я могу реализовать логику bcrypt.compare в форме входа.

Для регистрации я использую следующую логику и конечную точку:

  • /api/auth/local/регистрация

Я пробовал так:

  • /auth/login + заполняет + заполняет глубокий плагин
  • /api/users/me - который, я думаю, не возвращает это поле пароля в целях безопасности

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

Я не понимаю, что вы пытаетесь сделать? Вы пытаетесь воссоздать функцию сброса пароля? Потому что в Strapi есть такая встроенная функция 🤓

Jim LAURIE 03.04.2024 16:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
246
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы сгенерировать новый контроллер в новом 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 также делает это. Итак, я просто устанавливаю базовую аутентификацию, и она работает. Но ваше решение - это то, что я искал. И еще спасибо за ткацкий станок, спасибо за ваше время и объяснения!

Andrey Shaposhnikov 03.04.2024 17:54

эй @AndreyShaposhnikov, можешь рассказать метод, который ты использовал, я тоже застрял в такой же ситуации

Shubham Singhvi 14.05.2024 20:25

@ShubhamSinghvi, эй, просто посмотри видео, которое снял выше соучастник STRAPI. Это буквально 1 ответ здесь, вы не можете его пропустить. Это то, что вам нужно, чтобы получить пароль. Я не решал этого далеко, потому что понял, что мне НЕ нужен ПАРОЛЬ для сравнения с хешем, потому что Strapi проверяет его САМ, когда вы пытаетесь ВОЙТИ в систему. Но если вам НУЖЕН ПАРОЛЬ для чего-то другого — посмотрите схему выше.

Andrey Shaposhnikov 15.05.2024 21:46

@AndreyShaposhnikov да, спасибо, я смотрел видео 2...3 раза, у меня были ошибки, потом я понял, что моя проблема не такова, после того, как я обнаружил раздел провайдеров Google и после многих несовпадений URL-адресов ... я наконец закончил делать вход в Google и индивидуальный вход пользователя :)

Shubham Singhvi 23.05.2024 17:07

Другие вопросы по теме