Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-02-10 10:48:09
nach vorne
1177 Leute haben es durchsucht

如何使用 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)
Nach dem Login kopieren

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;
                          });
                        }
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage