Проблема с аутентификацией, вызывающая двойную вставку в базу данныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с аутентификацией, вызывающая двойную вставку в базу данных

Сообщение Anonymous »

я работаю над программным обеспечением с бэкэндом на Springboot, у меня разные сущности, моя проблема с аутентификацией с помощью jwt, но у меня разные пользователи с разными данными, я знаю, как с этим работать, но когда я использую реестр конечная точка, он создает мне два регистра: один с данными, а другой ни с чем, но он использует этот пустой регистр для ссылки на другую таблицу с дополнительной информацией
это мои сущности.
пользовательская сущность
Изображение
субъект администратора, у него есть внешний ключ с таблицей пользователей по идентификатору
Изображение
когда я использую конечную точку, я получаю что-то вроде этого
< img alt="user result" src="https://i.sstatic.net/Wg1HrpwX.png" />
и таблица администратора выглядит так

конечная точка аутентификации выглядит так

Код: Выделить всё

package com.ApiRestfulBackendVet.ApiRestfulBackendVet.Auth;

import com.ApiRestfulBackendVet.ApiRestfulBackendVet.models.adminModel;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.user.role;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.user.user;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.Jwt.jwtService;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.user.userRepository;
import org.springframework.security.crypto.password.PasswordEncoder;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.repositories.IAdminRepository;

@Service
@RequiredArgsConstructor
public class authService {

private final userRepository userRepository;
private final jwtService jwtService;
private final PasswordEncoder passwordEncoder;
private final AuthenticationManager authenticationManager;
private final IAdminRepository adminRepository;

private static final Logger logger = LoggerFactory.getLogger(authService.class);

public authResponse login (loginRequest request) {
logger.info("Intento de inicio de sesión para: {}", request.getUsername());

authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(request.getUsername(), request.getContraseña()));
UserDetails userDetails = userRepository.findByUsername(request.getUsername()).orElseThrow();
String token = jwtService.getToken(userDetails);

logger.info("Inicio de sesión exitoso para: {}", request.getUsername());

return authResponse.builder()
.token(token)
.build();
}

// Registro de admindios
public authResponse register (registerRequest request) {
logger.info("Registro solicitado para: {}", request.getUsername());

// Verificar si el usuario ya existe
if (userRepository.findByEmail(request.getEmail()).isPresent() || userRepository.findByUsername(request.getUsername()).isPresent()) {
logger.error("El correo o el nombre de usuario ya están registrados: {}", request.getUsername());
throw new IllegalArgumentException("El correo o el nombre de usuario ya están registrados.");
}

user user1 = user.builder()
.email(request.getEmail())
.username(request.getUsername())
.contrasena(passwordEncoder.encode(request.getContraseña()))
.role(role.ADMINDIOS)
.build();

userRepository.save(user1);
logger.info("Usuario registrado exitosamente: {}", user1.getUsername());

return authResponse.builder()
.token(jwtService.getToken(user1))
.build();
}

public authResponse registerAdmin(registerRequest request) {
logger.info("Registro de admin solicitado para:  {}", request.getUsername());

if (request.getIdSucursal() == null) {
throw new IllegalArgumentException("IdSucursal must not be null.");
}

// Verificar si el usuario ya existe
if (userRepository.findByEmail(request.getEmail()).isPresent() || userRepository.findByUsername(request.getUsername()).isPresent()) {
logger.error("El correo o el nombre de usuario ya están registrados: {}", request.getUsername());
throw new IllegalArgumentException("El correo o el nombre de usuario ya están registrados.");
}

user user1 = user.builder()
.email(request.getEmail())
.username(request.getUsername())
.contrasena(passwordEncoder.encode(request.getContraseña()))
.estatus("ACTIVO")
.role(role.ADMIN)
.build();

logger.info("Guardando el usuario: {}", user1.getUsername());
userRepository.save(user1);
logger.info("Usuario admin registrado exitosamente: {}", user1.getUsername());

// Crear el registro en adminModel
adminModel admin = new adminModel();
admin.setIdSucursal(request.getIdSucursal());
logger.info("Guardando el adminModel para la sucursal ID: {}", request.getIdSucursal());
adminRepository.save(admin);
logger.info("Registro en adminModel creado para la sucursal ID: {}", request.getIdSucursal());

return authResponse.builder()
.token(jwtService.getToken(user1))
.build();
}

}
из этой службы я использую функцию RegisterAdmin
это модель пользователя

Код: Выделить всё

package com.ApiRestfulBackendVet.ApiRestfulBackendVet.user;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "user")
public class user implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;

@Column(name = "email")
private String email;

@Column(name = "contraseña")
private String contrasena;

@Column(name = "username")
private String username;

@Column(name = "estatus")
private String estatus;

@Enumerated(EnumType.STRING)
role role;

@Override
public Collection

Подробнее здесь: [url]https://stackoverflow.com/questions/79077932/problem-with-auth-causing-double-insertion-in-database[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»