Maison >développement back-end >Golang >Comment envoyer des requêtes correctes à l'API en utilisant Dio/Flutter (frontend) et Go (backend)
l'éditeur php Yuzai vous propose un guide sur l'utilisation de Dio/Flutter (front-end) et Go (back-end) pour envoyer des requêtes correctes à l'API. Pendant le processus de développement, interagir avec les API est une tâche inévitable. Cependant, garantir l’exactitude et la validité des demandes n’est pas chose facile. Cet article vous présentera en détail comment utiliser Dio/Flutter et Go pour envoyer des requêtes correctes, rendant ainsi votre travail de développement plus fluide et plus efficace. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira de précieux conseils et astuces. Explorons ensemble !
Je teste cela dans Android Studio en ce moment. Voici le code Go que j'essaie d'utiliser dans une interface Flutter :
func Login(c *gin.Context) { // Get email and password off of req body var body struct { Email string Password string } if c.Bind(&body) != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Failed to read body", }) return } var user models.User if user.ID == 0 { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid email and/or password", }) return } // Lookup user by email, including records where deleted_at is NULL if err := initializers.DB.Where("email = ? AND deleted_at IS NULL", body.Email).First(&user).Error; err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid email and/or password", }) return } // Compare passwords err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(body.Password)) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid email and/or password", }) return } // Generate JWT Token token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "sub": user.ID, "exp": time.Now().Add(time.Hour * 24 * 30).Unix(), }) tokenString, err := token.SignedString([]byte(os.Getenv("SECRET"))) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "Failed to create token", }) return } // Send back c.SetSameSite(http.SameSiteLaxMode) c.SetCookie("AuthZ", tokenString, 3600*24*30, "", "", false, true) c.JSON(http.StatusOK, gin.H{}) } //main,go r.POST("/login", controllers.Login)
Je reçois toujours 400 codes d'erreur et j'essaie d'analyser pourquoi. Voici comment j'envoie la demande :
void postLogin(String email, String password) async { Response response; response = await _dio.post('$baseUrl/login', data: { 'email': email, 'password': password, }); } ... try { postLogin( emailController.text, passwordController.text); print('Login successful'); } catch (error) { print('Login failed: $error'); // Print Dio error message if (error is DioError) { print('Dio error message: ${error.message}'); } setState(() { errorText = 'Login failed. Please check your credentials.'; }); } finally { setState(() { isLoading = false; }); }
L'API fonctionne dans Postman et via d'autres méthodes de test, mais pas dans Android Studio, du moins pas de la même manière que j'utilise Dio.
Merci pour votre aide.
Cela ressemble à votre problème :
var user models.User if user.ID == 0 { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid email and/or password", }) return }
Supposons que models.User
上的 ID
只是一个 int
,默认始终为零!您可能想要加载用户,例如在检查 ID
ait été précédemment obtenu à partir de la base de données.
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!