Мой интерфейс - это Reactjs и серверные Nodejs и expressjs с базой данных Postgresql.
У меня есть простая страница входа, которая проверяет аутентификацию пользователя из базы данных.
В моем приложении Reactjs после входа пользователь загружает файлы, а затем на моем nodejs есть метод GET, который отправляет файлы (res.sendFile), когда пользователь хочет получить файл с сервера. Это просто
<img alt='none' src=`http://example.com/source/${filename}` />
в моем приложении Reactjs, которое запрашивает файл.
Проблема: Если я не вошел в свое приложение, я могу вставить URL-адрес в браузере, и отобразится файл, который НЕ тот, который я хочу.
Я хочу, чтобы метод GET на nodejs проверял аутентификацию пользователя, независимо от того, вошел ли пользователь в систему или нет, а затем только выполняет запрос на отправку файла.
Как я могу это сделать?
Должен ли я использовать какой-либо метод POST в моем приложении Reactjs, прежде чем он сделает любой запрос GET в то же место метода GET, затем проанализирует информацию и обработает ее в app.get и т. Д. *
Это мой nodejs + expressjs.
server.js
app.post('/signin', (req, res) => { signin.handleSignin(req, res, db, bcrypt)})
app.get('/source/:fileid', (req, res) => {
const { fileid } = req.params;
res.sendFile(__dirname + /data/ + fileid);
});
. / Контроллеры / signin.js
const handleSignin = (req, res, db, bcrypt) => {
const { email, password } = req.body;
if (!email || !password ) {
return res.status(400).json('Incorrect form submission');
}
db.select('email', 'hash').from('login')
.where('email', '=', email)
.then(data => {
const isValid = bcrypt.compareSync(password, data[0].hash);
if (isValid) {
return db.select('*').from('users')
.where('email', '=', email)
.then(user => {
res.json(user[0])
})
.catch(err => res.status(400).json('unable to get user'))
} else {
res.status(400).json('wrong credentials' )
}
})
.catch(err => res.status(400).json('wrong credentials'))
}
module.exports = {
handleSignin: handleSignin
}