Я создаю приложение для чата. Когда пользователи отправляют сообщения, я хочу, чтобы их ответы выводили имя пользователя, дату, комментарии.
Сейчас я просто проверяю, могу ли я выводить выбранные данные из своей базы данных.
Я использование Passport js для аутентификации пользователей. Я могу вывести выбранные данные пользователей из базы данных вручную, но это не то, что я хочу, я хочу вывести данные только зарегистрированного / аутентифицированного пользователя.
Индекс. js
sqlDatabase.query('SELECT users.username, comments.comments, comments.date FROM users, comments WHERE users.id=comments.id',
function(error, results, fields) {
if (error) throw error;
results.forEach((id) => {
console.log(id.username, id.date, id.comments)
Приведенный выше вывод выводит выбранные данные всех пользователей вместо CURRENT / LOGGED IN user
Вывод: Kaunda 2020-07-08 Hello friend. Рад вас видеть!
Вывод NowayOut 2020-07-09, это мое время
Как вы также можете видеть, в моей базе данных есть две таблицы. Я беру имя пользователя из одной таблицы, а дату и комментарии из другой таблицы.
Мне сказали попробовать использовать session_id, чтобы делать то, что я хочу. Я не знаю. Вот мой код для входа.
router.post("/login",
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
// failureFlash: true,
}));
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true,
},
function(req, email, password, done) {
console.log(email, password, done);
const sqlDatabase = require('../db.js');
sqlDatabase.query('SELECT * FROM users WHERE email = ?', [email], (err, results, fields, res) => {
if (err)
return done(err);
console.log(err, fields, results);
if (results.length === 0) {
done(null, false, { message: 'Check email and password again.' });
} else {
const hash = results[0].
password.toString();
const user_id = results[0].id;
bcrypt.compare(password, hash, function(err, response) {
console.log('User id is:' + user_id);
if (response === true) {
return done(null, 'User id is:' + user_id);
} else {
console.log(user_id);
console.log(err);
return done(null, false, { message: 'This is a test notification.' });
}
})
}
})
}));
passport.serializeUser(function(user_id, done) {
console.log(user_id);
done(null, user_id);
console.log(done);
});
passport.deserializeUser(function(user_id, done) {
done(null, user_id);
console.log(done);
});```
Yeah, so I've been battling with this. I want to output data of ONLY the authenticated user. Excuse all the console.log() stuff
Thanks in advance.