【发布时间】:2023-02-06 22:53:58
【问题描述】:
我正在尝试将 POST 从我的 javascript 文件发送到将验证登录的服务器本地主机。
这是我的前端代码:
// Create a function to handle the login process
async function login(username, password) {
try {
const response = await fetch('http://localhost:8080/api/login/', {
method: 'POST',
mode: 'no-cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username,
password,
})
});
// Check if the response was successful
if (!response.ok) {
throw new Error('Login failed. Please try again.');
}
// Parse the response JSON data
const data = await response.json();
// Check if the authentication was successful
if (!data.authenticated) {
throw new Error('Invalid username or password.');
}
// Store the authentication token in local storage
localStorage.setItem('token', data.token);
// Redirect the user to the loginPage.html page
window.location.href = '/loginPage.html';
} catch (error) {
// Show an error message
alert(error.message);
}
}
这是我的服务器代码:
@RestController
@RequestMapping("/api")
public class WSMController {
private Map<String, UserSession> sessions = new HashMap<>();
@Autowired
private WSMService service;
@PostMapping(value = "/login")
public ResponseEntity<String> login(@RequestBody LoginRequest request) {
User user = authenticate(request);
if (user == null) {
return ResponseEntity.badRequest().body("Invalid username or password");
}
String token = UUID.randomUUID().toString();
UserSession session = new UserSession(user, token);
sessions.put(token, session);
return ResponseEntity.ok(token);
}
@PostMapping("/logoff")
public ResponseEntity<String> logoff(@RequestHeader("Authorization") String token) {
sessions.remove(token.substring(7));
return ResponseEntity.ok("User logged off successfully");
}
@GetMapping("/user")
public User getUser(@RequestHeader("Authorization") String token) {
UserSession session = sessions.get(token.substring(7));
if (session == null) {
return null;
}
return session.getUser();
}
private User authenticate(LoginRequest request) {
if(!service.getCredentials(request)) {
return null;
}
return new User(request.getUsername(),request.getPassword());
}
这是我的登录请求对象:
package com.worksoftmanager.WorkSoftManagerAuthenticator.model;
公共类登录请求{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这是来自服务器端的错误消息: 2023-02-06 10:43:10.674 WARN 20380 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver:已解决 [org.springframework.web.HttpMediaTypeNotSupportedException:内容类型 'text/plain;charset=UTF-8 ' 不支持]
我尝试设置标头以发送 application/json 内容并更改 RequestMapping 以使用 Application_JSON_Value 但它们都不起作用。
【问题讨论】:
-
您的 LoginRequest 类是什么样的?
-
让我通过添加 LoginRequest @AchoVasilev 来编辑我的问题
标签: javascript spring fetch