Heim  >  Artikel  >  Backend-Entwicklung  >  So senden Sie mit Dio/Flutter (Frontend) und Go (Backend) korrekte Anfragen an die API

So senden Sie mit Dio/Flutter (Frontend) und Go (Backend) korrekte Anfragen an die API

WBOY
WBOYnach vorne
2024-02-10 10:48:091140Durchsuche

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

php-Editor Yuzai bietet Ihnen eine Anleitung zur Verwendung von Dio/Flutter (Front-End) und Go (Back-End), um korrekte Anfragen an die API zu senden. Während des Entwicklungsprozesses ist die Interaktion mit APIs eine unvermeidbare Aufgabe. Es ist jedoch nicht einfach, die Richtigkeit und Gültigkeit von Anfragen sicherzustellen. In diesem Artikel erfahren Sie im Detail, wie Sie mit Dio/Flutter und Go korrekte Anfragen senden und so Ihre Entwicklungsarbeit reibungsloser und effizienter gestalten. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel liefert Ihnen wertvolle Anleitungen und Tipps. Lasst uns gemeinsam erkunden!

Frageninhalt

Ich teste das gerade in Android Studio. Hier ist der Go-Code, den ich in einem Flutter-Frontend verwenden möchte:

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)

Ich erhalte ständig 400 Fehlercodes und versuche zu analysieren, warum. So versende ich die Anfrage:

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;
                          });
                        }

Die API funktioniert in Postman und mit anderen Testmethoden, aber nicht in Android Studio, zumindest nicht so, wie ich Dio verwende.

Danke für deine Hilfe.

Lösung

Das scheint Ihr Problem zu sein:

var user models.User
if user.ID == 0 {
    c.JSON(http.StatusBadRequest, gin.H{
        "error": "Invalid email and/or password",
    })
    return
}

Angenommen, models.User 上的 ID 只是一个 int,默认始终为零!您可能想要加载用户,例如在检查 ID wurde zuvor aus der Datenbank abgerufen.

Das obige ist der detaillierte Inhalt vonSo senden Sie mit Dio/Flutter (Frontend) und Go (Backend) korrekte Anfragen an die API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen