php小编鱼仔为您带来了一篇关于使用Dio/Flutter(前端)和Go(后端)向API发送正确请求的指南。在开发过程中,与API进行交互是不可避免的任务。然而,确保请求的准确性和有效性并不容易。本文将为您详细介绍如何使用Dio/Flutter和Go来发送正确的请求,让您的开发工作更加顺利和高效。无论您是初学者还是有经验的开发者,本文都将为您提供有价值的指导和技巧。让我们一起来探索吧!
我现在正在 Android Studio 中对此进行测试。这是我尝试在 Flutter 前端中使用的 Go 代码:
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)
我不断收到 400 错误代码,我正在尝试分析原因。以下是我发送请求的方式:
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; }); }
该 API 在 Postman 中并通过其他测试方法可以工作,但在 Android Studio 中不起作用,至少在我使用 Dio 的方式中不起作用。
感谢您的帮助。
这看起来像你的问题:
var user models.User if user.ID == 0 { c.JSON(http.StatusBadRequest, gin.H{ "error": "Invalid email and/or password", }) return }
假设 models.User
上的 ID
只是一个 int
,默认始终为零!您可能想要加载用户,例如在检查 ID
之前从数据库中获取。
以上是如何使用 Dio/Flutter(前端)和 Go(后端)向 API 发送正确的请求的详细内容。更多信息请关注PHP中文网其他相关文章!