Я создаю веб-приложение, которое позволяет игрокам Fortnite найти других игроков для игры. Пользователи должны иметь возможность зарегистрироваться, войти в систему, оставлять сообщения и комментировать. Я разработал интерфейсную часть функций входа и регистрации пользователя, а также серверную часть регистрации пользователя, но одно из моих требований заключается в следующем:
Перед регистрацией сервер должен проверить, является ли предоставленное имя пользователя реальным именем пользователя Fortnite, используя API-интерфейс FortniteTracker, который предоставляет профили пользователей с использованием их очень простого API.
Пример вызова: GET https://api.fortnitetracker.com/v1/profile/{platform}/{epic-nickname}
Как проверить, что имя пользователя существует, прежде чем разрешить пользователю создавать учетную запись?
Я пытался создать отдельную конечную точку для вызова API со стороны сервера, но я не знал, как реализовать ее в моей конечной точке / register
script.js
function registerRequest(username,password) {
$.ajax({
url: "http://localhost:8080/register",
type: 'POST',
data: JSON.stringify({username,password}),
contentType: "application/json",
error : function(err) {
console.log('Error here!', err)
},
success: function(data) {
console.log('Success!')
// What do I put here?
}
});
}
function handleRegisterSubmit(event) {
event.preventDefault();
const username = $(event.currentTarget).find('.username-register').val()
const password = $(event.currentTarget).find('.password-register').val()
const passwordConfirm = $(event.currentTarget).find('.password-confirm').val()
if (password === passwordConfirm) {
registerRequest(username,password)
}
else {
console.error("Passwords did not match")
}
}
$(function onLoad() {
displayRegisterPage()
$(`.js-content-section`).on('submit', '.js-register-form', handleRegisterSubmit)
}
})
server.js
app.post('/register', jsonParser, (req, res) => {
const requiredFields = ['username', 'password']
for (let i = 0; i < requiredFields.length; i++) {
const field = requiredFields[i]
if (!(field in req.body)) {
const message = `Missing \`${field}\` in request body`
console.error(message)
return res.status(400).send(message)
}
}
let username = req.body.username;
let password = req.body.password;
User.findOne({username})
.then(user => {
if (user) {
const message = `username is already taken`
console.error(message)
return res.status(400).send(message)
}
else {
User.create({username, password})
.then(user => {
const userRes = {
id: user._id,
username: user.username
}
res.status(201).json(userRes)
}
)
}
})
.catch(err => {
console.error(err)
res.status(500).json({ error: 'something went horribly wrong'})
})
})
app.get('/login', (req, res) => {
const usernameReq = User.findById(req.body.username);
if (usernameReq) {
console.log(usernameReq)
res.status(201).json(usernameReq)
}
})
schema.js
const UserSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
required: true,
trim: true
},
password: {
type: String,
required: true,
}
});
const User = mongoose.model('User', UserSchema);
module.exports = User;
Я ожидаю, что, если я зарегистрируюсь как "ninja" в качестве имени пользователя, я смогу зарегистрироваться, поскольку это действительное имя пользователя Fortnite. Фактический вывод в настоящее время позволяет пользователям регистрироваться под любым именем пользователя, которое еще не занято в базе данных.