Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

Сегодня, в этой статье, вы узнаете, как создать полноценную систему регистрации с проверкой электронной почты, используя язык программирования Java, фреймворк Spring Boot и MySQL в качестве базы данных. Ссылка на полный код будет доступна в конце.

@javatg – Java в телеграмме.

Список необходимых инструментов:

  • Maven 3.0+
  • IDE (Eclipse или IntelliJ)
  • JDK 1.8+
  • Сервер базы данных MySQL
  • Postman или Insomnia  для тестирования
  • Протокол SMPT

1. Создание проекта

Создайте шаблон проекта и добавьте зависимости из spring initializr

  • Выберите проект Maven и ЯП Java.
  • Дайте название своему проекту.
  • Добавьте зависимости для SpringWeb, драйвера MySQL и Spring Data JPA, Spring Security и Java Mail Sender. Они будут добавлены в pom.xml файл внутри папки вашего проекта.
  • Нажмите на кнопку GENERATE.
  • Zip-файл проекта будет загружен, теперь распакуйте вашу папку.
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

2. Создание базы данных MySQL

  • Откройте MySQL workbench или войдите в систему с терминала.
  • Создайте новую схему “demo_register”.
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

3. Активация службы SMTP

  • Откройте раздел Manage вашего сайта через учётную запись вашего Gmail.
  • Перейдите во вкладку Security и убедитесь, что включена двухфакторная аутентификация.
  • Затем создайте App password, выберите Other, и дайте ему имя.
  • Будет показан пароль, убедитесь, что вы скопировали и сохранили его для дальнейшего использования.
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

4. Настройка конфигурации

  • Откройте распакованный файл в вашей любимой среде разработки.
  • Откройте файл src/main/resources/applications.properties.
  • Добавьте конфигурацию базы данных и электронной почты в файл application.properties.
  • Измените имя пользователя и пароль в соответствии с вашей базой данных.
  • В разделе Свойства электронной почты введите свой Gmail в поле имя пользователя и пароль, который вы скопировали до этого.
server.port = 8085
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/demo_register
spring.datasource.username=db_user_name
spring.datasource.password=db_password
spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.jpa.show-sql: true

###### Email Properties ######
#smtp mail properties
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=example@gmail.com
spring.mail.password=gmail_app_password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

5. Создание User Entity (пользовательской сущности)

Сущности — это объекты, содержащиеся в Master Data Services моделях. Каждая сущность содержит элементы, которые являются строками основных данных, которыми можно управлять.

  • Создайте сущность.
  • Добавьте класс Java в пакет сущностей, имя User.java и аннотируйте с помощью Entity annotation.
  • Добавьте идентификатор и другие необходимые поля в класс пользователя.
  • Щёлкните правой кнопкой мыши -> Сгенерировать -> Средство получения и настройки -> выберите все переменные; для создания методов получения и настройки.
  • Сгенерируйте конструктор всех аргументов и конструктор без аргументов.
  • Аналогичным образом создайте ConfirmationToken.сущность java.
  • Обратитесь к приведенному ниже коду для получения необходимых элементов данных.

ВНИМАНИЕ: Мы будем использовать библиотеку javax.persistence.* для сущностей, идентификаторов и других аннотаций. Как только вы добавите приведенный ниже код, Spring попросит вас добавить jar-файл. Итак, наведите курсор на аннотацию объекта и добавьте jar-файл для javax. Если вы столкнётесь с какими-либо трудностями, то непосредственно добавьте зависимость к pom.xml файлу.

<dependency>
   <groupId>javax.persistence</groupId>
   <artifactId>persistence-api</artifactId>
   <version>2.2.3</version>
</dependency>
//User.java
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long userId;

    private String userName;

    private String userEmail;

    private String userPassword;

    private boolean isEnabled;
    //add no args and all args constructer and getter/setter
//ConfirmationToken.java    
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="token_id")
    private Long tokenId;

    @Column(name="confirmation_token")
    private String confirmationToken;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    //add no args and all args constructer and getter/setter

6. Создание репозитория JPA

JPA расшифровывается как Java Persistence API (интерфейс прикладного программирования). JPA – это спецификация, которая определяет, как получать доступ, управлять и сохранять информацию / данные между объектами java и реляционными базами данных.

  • Создайте новый репозиторий.
  • Добавьте Java-интерфейс в пакет репозитория с именем UserRepository и прокомментируйте его аннотацией репозитория.
  • Расширьте свой репозиторий с помощью репозитория JPA.
  • Аналогичным образом создайте репозиторий для ConfirmationToken.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUserEmailIgnoreCase(String emailId);

    Boolean existsByUserEmail(String email);
}
@Repository("confirmationTokenRepository")
public interface ConfirmationTokenRepository extends JpaRepository<ConfirmationToken, Long> {
    ConfirmationToken findByConfirmationToken(String confirmationToken);
}

7. Создание класса Service

Сервисный уровень – это уровень в приложении, который облегчает связь между контроллером и уровнем сохраняемости/сущности. Кроме того, бизнес-логика хранится на уровне сервиса.

  • Создайте класс Service.
  • Добавьте EmailService.java, запишите в него файл и добавьте приведённый ниже код. Эта услуга отправит письмо на почту получателю.
@Service("emailService")
public class EmailService {

    private JavaMailSender javaMailSender;

    @Autowired
    public EmailService(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    @Async
    public void sendEmail(SimpleMailMessage email) {
        javaMailSender.send(email);
    }

}
  • Добавьте интерфейс Java в пакет услуг с именем UserService.
  • Добавьте в него определения следующих функций и реализуйте эти функции в UserServiceImpl:
public interface UserService {

    ResponseEntity<?> saveUser(User user);

    ResponseEntity<?> confirmEmail(String confirmationToken);
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    ConfirmationTokenRepository confirmationTokenRepository;

    @Autowired
    EmailService emailService;

    @Override
    public ResponseEntity<?> saveUser(User user) {

        if (userRepository.existsByUserEmail(user.getUserEmail())) {
            return ResponseEntity.badRequest().body("Error: Email is already in use!");
        }

        userRepository.save(user);

        ConfirmationToken confirmationToken = new ConfirmationToken(user);

        confirmationTokenRepository.save(confirmationToken);

        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setTo(user.getUserEmail());
        mailMessage.setSubject("Complete Registration!");
        mailMessage.setText("To confirm your account, please click here : "
                +"http://localhost:8085/confirm-account?token="+confirmationToken.getConfirmationToken());
        emailService.sendEmail(mailMessage);

        System.out.println("Confirmation Token: " + confirmationToken.getConfirmationToken());

        return ResponseEntity.ok("Verify email by the link sent on your email address");
    }

    @Override
    public ResponseEntity<?> confirmEmail(String confirmationToken) {
        ConfirmationToken token = confirmationTokenRepository.findByConfirmationToken(confirmationToken);

        if(token != null)
        {
            User user = userRepository.findByUserEmailIgnoreCase(token.getUserEntity().getUserEmail());
            user.setEnabled(true);
            userRepository.save(user);
            return ResponseEntity.ok("Email verified successfully!");
        }
        return ResponseEntity.badRequest().body("Error: Couldn't verify email");
    }
}

8. Создание контроллера

Метод контроллера начинает обрабатывать веб-запрос, взаимодействуя с service layer.

  • Создайте контроллер.
  • Добавьте класс Java в пакет контроллера с именем UserController.
  • Здесь мы используем все наши Rest API и вызываем необходимые функции.
  • Добавьте следующий код:
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/register")
    public ResponseEntity<?> registerUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @RequestMapping(value="/confirm-account", method= {RequestMethod.GET, RequestMethod.POST})
    public ResponseEntity<?> confirmUserAccount(@RequestParam("token")String confirmationToken) {
        return userService.confirmEmail(confirmationToken);
    }

}

Окончательная иерархия проекта

Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

9. Тестирование API в Postman

Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot
  • Проверьте текущее значение активации в базе данных. В настоящее время пользователь не активен.
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot
  • Проверьте наличие ссылки в вашем электронном письме.
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot
  • Нажмите на ссылку и откройте её в своём браузере
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot
  • Проверьте свою базу данных еще раз
Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

Мы можем увидеть, что, как только электронная почта пользователя подтверждена, пользователь становится активным в нашей базе данных. Вот и всё, вы – молодец, ведь дошли до конца. Если у вас есть какие-либо вопросы, задавайте их в комментариях ниже. Я с радостью отвечу на них!

Ссылка на полный код

+1
4
+1
1
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *