Maison  >  Article  >  développement back-end  >  Comment envoyer des requêtes correctes à l'API en utilisant Dio/Flutter (frontend) et Go (backend)

Comment envoyer des requêtes correctes à l'API en utilisant Dio/Flutter (frontend) et Go (backend)

WBOY
WBOYavant
2024-02-10 10:48:091138parcourir

如何使用 Dio/Flutter(前端)和 Go(后端)向 API 发送正确的请求

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 !

Contenu de la question

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.

Solution

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!

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