Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-10 10:48:09
avant
1140 Les gens l'ont consulté

如何使用 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)
Copier après la connexion

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;
                          });
                        }
Copier après la connexion

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
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!