[JAVA] Comment mettre en œuvre la fonction d'authentification du courrier au moment de l'inscription de l'utilisateur

introduction

Je vais vous présenter le flux de la fonction d'authentification du courrier implémentée lors de la création d'un service Web. Tout ce que vous avez à faire est d'enregistrer la base de données et de vérifier les doublons. Cependant, au début, il a fallu du temps pour obtenir une image de la méthode de mise en œuvre, donc Je voudrais présenter principalement le flux de mise en œuvre.

Flux global:

  1. (Utilisateur) Entrez votre adresse e-mail et votre mot de passe
  2. (Système) Générez l'UUID et enregistrez-le dans une table temporaire avec les informations utilisateur
  3. (Système) Envoyez l'URL d'authentification à l'utilisateur
  4. Cliquez sur l'URL d'authentification de l'adresse e-mail (de l'utilisateur)
  5. Enregistrez officiellement l'utilisateur de la table temporaire correspondant à l'UUID (système)

1. Entrez votre adresse e-mail et votre mot de passe

Transmettez les informations utilisateur au serveur comme vous le souhaitez, que ce soit Ajax ou Post.

スクリーンショット 2018-05-13 17.20.36.png

2.3. Enregistrer les informations utilisateur dans la table temporaire et envoyer l'URL d'authentification à l'utilisateur

Nous traiterons dans le flux suivant.

  1. Recevoir les informations utilisateur saisies
  2. Vérifiez si l'adresse e-mail saisie est déjà enregistrée
  3. Enregistrer l'utilisateur dans la table temporaire avec UUID si confirmé
  4. Générez une URL d'authentification et envoyez-la par e-mail à l'utilisateur. L'URL d'authentification est «/ validate / id = UUID».

Pour identifier que l'utilisateur a cliqué sur l'URL Il est nécessaire d'ajouter les informations associées à l'utilisateur enregistrées dans la table temporaire à l'URL. Si vous pouvez battre ou prédire, vous pouvez authentifier d'autres utilisateurs temporaires, donc Utilisez UUID.

RegisterUserController


boolean isMember = memberRepository.existsByUsername(user);


			if(!isMember){
			String vali = UuidUtil.generateUUID();
			BCryptPasswordEncoder passEncoder = new BCryptPasswordEncoder();




			try {
				TmpMember tmpMember = new TmpMember(user, passEncoder.encode(pass), displyname, vali);
				tmpMemberRepository.saveAndFlush(tmpMember);
			} catch (Exception e) {
				e.printStackTrace();
				//status = "Erreur: échec de l'enregistrement de la base de données";
				return status;
			}

			String IPadnPort = myIP.getYourIP();
			String from = "Adresse e-mail de l'expéditeur";
			String title = "Demande de confirmation de compte Tobidemo";
			String content = displyname + "M." + "\n" + "\n" + "Veuillez accéder au lien ci-dessous pour authentifier votre compte" + "\n"
					+"http://" + IPadnPort
					+ "/validate"+ "?id=" + vali ;

			try {
				SimpleMailMessage msg = new SimpleMailMessage();

				msg.setFrom(from);
				msg.setTo(user);
				msg.setSubject(title);//Réglage du titre
				msg.setText(content); //Paramètres du corps
				mailSender.send(msg);
			} catch (Exception e) {
				e.printStackTrace();
				//status = "Erreur: échec de l'envoi de l'e-mail";
				return status;
			}

			status = "ok";
			}
			return status; //ng

		}
		;
		return status; //ng

	}

4. Cliquez sur l'URL d'authentification de l'adresse e-mail

L'e-mail suivant sera envoyé à l'utilisateur.

スクリーンショット 2018-05-13 17.36.51.png

5. Enregistrez officiellement l'utilisateur de la table temporaire correspondant à l'UUID

Lorsqu'un utilisateur clique sur une URL pour y accéder, il reçoit un UUID avec id =. Vérifiez si l'UUID reçu est stocké dans la table temporaire. Si confirmé, dans le tableau qui stocke les informations utilisateur authentifié, Réenregistrez-vous. Il redirige ensuite vers la page de connexion du service.

ValidateUserController.java


@CrossOrigin
	@RequestMapping(value = "/validate", method = RequestMethod.GET)
	public String validate(RedirectAttributes redirectAttributes,ModelAndView mav, @RequestParam("id") String id) throws Exception {

		String isRegisterd = "false";
		boolean isExist = tmpMemberRepository.existsByValidation(id);


		//System.out.println(isExist);

		if (isExist) {
			try {
				TmpMember tmp = tmpMemberRepository.findByValidation(id);
				String username = tmp.getUsername();
				String displyname = tmp.getDisplyname();
				String password = tmp.getPassword();


				Member member = new Member();
				member.setDisplyname(displyname);
				member.setPassword(password);
				member.setUsername(username);

				memberRepository.saveAndFlush(member);

				isRegisterd = "true";

			} catch (Exception e) {
				//Bloc de capture généré automatiquement TODO
				e.printStackTrace();
				 isRegisterd = "false";
			}


		}
		redirectAttributes.addFlashAttribute("isRegisterd", isRegisterd);
		 return "redirect:/edit/begin";
	}

Résumé

Bien que ce soit une fonction minimale, il était étonnamment facile de mettre en œuvre l'authentification de messagerie. Puisqu'il s'agit de ma propre logique d'authentification de messagerie, il peut y avoir quelque chose d'étrange, mais comme il s'agit de développement personnel, il est important de travailler!

Recommended Posts

Comment mettre en œuvre la fonction d'authentification du courrier au moment de l'inscription de l'utilisateur
Au moment de la nouvelle inscription, fonction d'envoi de courrier avec Action Mailer
Comment mettre en œuvre la fonction de chapelure avec Gretel
[Pour les débutants] Comment implémenter la fonction de suppression
Comment supprimer le tweet associé à l'utilisateur lorsque vous le supprimez en même temps
Comment ajouter la fonction de suppression
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Comment déterminer le nombre de parallèles
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
[Java] Comment régler la date sur 00:00:00
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
Comment trier une liste de SelectItems
Comment implémenter TextInputLayout avec la fonction de validation
[Traitement × Java] Comment utiliser la fonction
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
Comment accéder directement à Socket avec la fonction TCP de Spring Integration
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
[Rails] Comment résoudre le décalage temporel de created_at après la méthode de sauvegarde
Comment trouver la cause de l'erreur Ruby
Personnalisez la répartition du contenu de Recyclerview
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
[Rails6] Comment connecter la fonction d'affichage générée par Scaffold avec la fonction utilisateur générée par devise
Définir l'heure de LocalDateTime à une heure spécifique
Sortie de la façon d'utiliser la méthode slice
Comment afficher le résultat du remplissage du formulaire
Comment implémenter le processus d'authentification en spécifiant le nom d'utilisateur et le mot de passe dans Spring Boot
Comment supprimer des éléments enfants associés à un élément parent en même temps
Implémentons une fonction pour limiter le nombre d'accès à l'API avec SpringBoot + Redis
[Java] Comment obtenir l'URL de la source de transition
Comment supprimer / mettre à jour le champ de liste de OneToMany
Comment régler l'heure d'affichage sur l'heure japonaise dans les rails
Comment écrire Scala du point de vue de Java
Comparaison de vitesse au moment de la génération au moment de la conversion de la date
[Java] Comment obtenir la valeur maximale de HashMap
[Rails] Comment changer le nom de colonne de la table
[Android] Comment obtenir la langue de réglage du terminal
[Rails] Comment obtenir le contenu des paramètres forts
Résumé de la mise en œuvre des arguments par défaut en Java
Comment télécharger une ancienne version d'Apache Tomcat
[Swift] Comment obtenir l'ID de document Firebase
Comment la valeur suivante de l'objet Time est-elle correcte?
Comment étudier le kotlin pour la première fois ~ Partie 2 ~
Comment étudier le kotlin pour la première fois ~ Partie 1 ~
Introduction de l'authentification des utilisateurs