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!
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.
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!