node.js - 在node.js中登录后获取用户信息
问题描述
我正在使用本地护照对我的网站的用户进行身份验证。
passport.use('login', new LocalStrategy({
passReqToCallback : true
},
function(req, username, password, done) {
User.findOne({'local.username': username}, function(err, user) {
if(err)
return done(err);
if(!user){
console.log('User Not Found with username ');
return done(null, false);
}
if(!isValidPassword(user, password)){
console.log('Invalid Password');
return done(null, false); // redirect back to login page
}
console.log('Successfully logged in user ');
return done(null, user);
});
}
));
这就是它的路由方式:
router.get('/success', function(req, res){
res.send({state: 'success', user: req.user ? req.user : null});
});
router.post('/login', passport.authenticate('login', {
successRedirect: '/auth/success',
failureRedirect: '/auth/failure'
}));
router.get('/profile', function(req, res){
res.render('profile.ejs', { user: req.user });
});
这就是我在 .ts 文件中调用上述登录函数的方式:
let data = {
username: this.username,
password: this.password
};
this.http.post('http://127.0.0.1:3000/auth/login', data).pipe(
map(res => res.json())
).subscribe(res=> {
let alert = this.alertCtrl.create({
title: 'Login Successful!',
subTitle: 'You are logged in',
buttons: ['Okay']
});
alert.present();
this.http.get('http://127.0.0.1:3000/auth/profile', res);
在这里,我应该在用户登录 res 时获取所有用户的数据,不是吗?如果不是这样,那么如何在登录时获取所有用户的数据并将其发送到 /profile?
解决方案
希望您的护照和型号配置正确。
尝试类似的东西 -
module.exports = function(app, passport) {
// HOME PAGE
app.get('/', function(req, res) {
res.render('index.ejs'); // load the index.ejs file
});
// LOGIN
app.get('/login', function(req, res) {
res.render('login.ejs', { message: req.flash('loginMessage') });
});
// PROFILE SECTION
app.get('/profile', isLoggedIn, function(req, res) {
res.render('profile.ejs', {
user : req.user // get the user out of session and pass to template
});
});
};
// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {
// user authentication in the session, carry on
if (req.isAuthenticated())
return next();
// user not authenticated, take to home page
res.redirect('/');
}
然后像 -
app.post('/login', passport.authenticate('local-login', {
successRedirect : '/profile', // redirect to profile
failureRedirect : '/login'
}));
您可以尝试访问模板中的用户对象,例如 - 类似于<%= user.local.email %>
取决于您的模板引擎。
推荐阅读
- jsp - 升级正在运行的 Tomcat servlet
- c++ - 如何为许多源代码和头文件正确组织 Cmake 文件?
- php - 在codeigniter中每3个数据添加新的div和end div
- javascript - 如何在 ExtJS 上使用一种以上的 gridfilter 类型?
- c# - 如何添加由脚本创建的每个按钮单击侦听器事件?
- angularjs - 在角度中使用 ng-if 来显示或隐藏图像
- reactjs - React Hooks 和 TypeScript Fetching API:对象可能为“空”
- c# - 分段上传文件中的 Amazon S3 加载问题
- javascript - 在两个页面之间共享对象数组
- python - 在机器/深度学习上运行代码时出错