Maison >cadre php >PensezPHP >Comment le front-end appelle-t-il le code de vérification backend tp6 ?

Comment le front-end appelle-t-il le code de vérification backend tp6 ?

藏色散人
藏色散人avant
2021-12-13 14:41:142187parcourir

Environnement

Front-end : uni-app

Back-end : thinkphp6

Lors de la page de connexion frontale, je souhaite appeler la fonction de code de vérification thinkphp6 back-end sur la page de connexion, donc J'essaie d'obtenir le captcha du front-end via l'adresse de l'image de l'interface API back-end. La méthode essayée consiste à définir la méthode API back-end getCaptcha. Après avoir appelé captcha_src() dans la méthode, l'adresse de l'image peut être obtenue, puis renvoyée à l'appel frontal, l'image du code de vérification peut être affichée normalement. Mais voici le problème lors de la connexion, il est toujours demandé que le code de vérification soit incorrect. Plus tard, après comparaison, j'ai découvert que l'ID de session du code de vérification obtenu était incohérent avec l'ID de session lorsque je me suis connecté et soumis, la vérification a donc échoué.

Pourquoi lorsque le front-end pointe vers l'adresse du code de vérification de thinkphp6 via l'adresse src de la balise img, l'ID de session généré par l'arrière-plan est différent de l'ID de session généré lorsque j'opère sur la page actuelle. Ce mécanisme n'est toujours pas clair. .

Plus tard, j'ai vu qu'il existe une méthode create() dans la classe captcha pour générer directement un code de vérification. Après avoir testé, appeler cette méthode via l'API peut générer un code de vérification et l'ID de session est cohérent avec l'ID de session lorsque je le fais. connectez-vous plus tard, mais j'ai rencontré un autre problème. La méthode create() renvoie la méthode de réponse et la requête uni.request sur le front-end ne peut pas être obtenue, ce qui empêche l'affichage de l'image du code de vérification. Après réflexion, j'ai décidé de modifier la classe captcha et de remplacer la méthode create() par une autre nouvelle méthode. Cette méthode renvoie le codage base64 du code de vérification généré, puis renvoie le résultat de la chaîne au front-end. peut Affichage normal et connexion de vérification.

Le code spécifique est le suivant :

1. Ajoutez la méthode createApi() de la classe captcha Cette méthode est en fait une copie de create(), mais la valeur renvoyée est modifiée comme suit :

$base64_data = 'data:image/png;base64,' . base64_encode($content);//合成图片的base64编码
return $base64_data;
2. api方法调用返回
public function getCaptcha(){
        $captcha = Captcha::createApi();
        return apiResultShow(config("status.success"),lang("success"),$captcha);

    }

3. . Le front-end reçoit et affiche le code de vérification

<view @click="getCaptcha()">
	<captcha-img  :captchaSrc="captchaSrc" ></captcha-img>
</view>


.......
.........
...........
.............


getCaptcha(){
				var request_data = {};
				var sign = this.sign(request_data);
				uni.request({
				    url: '/url/api/member/getCaptcha',
				    data: { 
						sign:sign
					},
					method: 'POST',
					header:{
						"Content-Security-Policy": "upgrade-insecure-requests",
						"X-Requested-With": "XMLHttpRequest",
					},
					dataType:'json',
				    success: (res) => {
						if(res.data.status == 0){
							var img_src = res.data.result;
							this.captchaSrc = img_src;
						}else{
							this.captchaSrc ="";						
						} 
				    }
				});
			},

Recommandé : "Les 10 derniers didacticiels vidéo thinkphp"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer