Passport.ls/Mysql - 获取authenticated/current用户数据
Passport.ls/Mysql - get authenticated/current user data
我正在构建一个聊天应用程序。当用户发送消息时,我希望他们的回复输出用户名、日期、评论。
目前我只是在测试是否可以从我的数据库中输出选定的数据。
我正在使用 Passport js 对用户进行身份验证。我可以手动从数据库中输出用户的选定数据,但这不是我想要的,我只想输出已登录的 in/authenticated 用户的数据。
Index.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 你好朋友。很高兴见到你!
输出NowayOut 2020-07-09 这是我的时间
如您所见,我的数据库中有两个 table。我从一个 table 中提取用户名,从另一个 table
中提取日期和评论
有人告诉我尝试使用 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.
要仅限制登录的用户使用您的聊天功能,您可以使用中间件来检查用户是否已通过身份验证,如果没有,它将被重定向,您只需将其放在不同的文件中并导出,然后添加即可到您要限制访问的任何路线。
module.exports={
checkuserauth:(req,res,next)=>{
if(req.isAuthenticated()){
res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0')
return next()
}
req.flash("error_msg","Please login to see this content")
res.redirect('/login')
},
forwardAuthenticated: function(req, res, next) {
if (!req.isAuthenticated()) {
return next();
}
res.redirect('/');
}
}
现在在你的路由中你可以像这样添加中间件
router.get("/",checkuserauth,(req,res){ //your code here })
要仅输出已登录 in/authenticated 用户的数据,您可以使用通行证 serializes
用户进入会话这一事实,它将 user Id
附加到 request
您可以使用它来了解已登录的用户并向数据库发出请求 req.user_id
。
另一种方法是在您的数据库中为每个用户添加一个 boolean
变量 isauthenticated
,只要用户成功通过身份验证,您只需将其设置为 true,这将允许您仅过滤经过身份验证的用户
我知道我不久前发布了这个,但这里是答案。我使用护照用户获取当前 logged/authenticated 用户。
router.post("/superhero", function(req, res) {
const user = req.user;
const comments = req.body.comments;
sqlDatabase.query("INSERT INTO comments (user_id, comments) VALUES (?, ?)", [user, comments],
function(error, results, fields) {
if (error) throw error;
console.log(results);
console.log(comments);
console.log(error)
});
})
我正在构建一个聊天应用程序。当用户发送消息时,我希望他们的回复输出用户名、日期、评论。
目前我只是在测试是否可以从我的数据库中输出选定的数据。
我正在使用 Passport js 对用户进行身份验证。我可以手动从数据库中输出用户的选定数据,但这不是我想要的,我只想输出已登录的 in/authenticated 用户的数据。
Index.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 你好朋友。很高兴见到你!
输出NowayOut 2020-07-09 这是我的时间
如您所见,我的数据库中有两个 table。我从一个 table 中提取用户名,从另一个 table
中提取日期和评论有人告诉我尝试使用 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.
要仅限制登录的用户使用您的聊天功能,您可以使用中间件来检查用户是否已通过身份验证,如果没有,它将被重定向,您只需将其放在不同的文件中并导出,然后添加即可到您要限制访问的任何路线。
module.exports={
checkuserauth:(req,res,next)=>{
if(req.isAuthenticated()){
res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0')
return next()
}
req.flash("error_msg","Please login to see this content")
res.redirect('/login')
},
forwardAuthenticated: function(req, res, next) {
if (!req.isAuthenticated()) {
return next();
}
res.redirect('/');
}
}
现在在你的路由中你可以像这样添加中间件
router.get("/",checkuserauth,(req,res){ //your code here })
要仅输出已登录 in/authenticated 用户的数据,您可以使用通行证 serializes
用户进入会话这一事实,它将 user Id
附加到 request
您可以使用它来了解已登录的用户并向数据库发出请求 req.user_id
。
另一种方法是在您的数据库中为每个用户添加一个 boolean
变量 isauthenticated
,只要用户成功通过身份验证,您只需将其设置为 true,这将允许您仅过滤经过身份验证的用户
我知道我不久前发布了这个,但这里是答案。我使用护照用户获取当前 logged/authenticated 用户。
router.post("/superhero", function(req, res) {
const user = req.user;
const comments = req.body.comments;
sqlDatabase.query("INSERT INTO comments (user_id, comments) VALUES (?, ?)", [user, comments],
function(error, results, fields) {
if (error) throw error;
console.log(results);
console.log(comments);
console.log(error)
});
})