我正在使用本地护照对我的网站的用户进行身份验证。
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?
答案 0 :(得分:0)
希望您的护照和型号配置正确。
尝试类似-
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 %>
。