在Node.js中,可以使用第三方模块如Passport进行用户认证。Passport支持多种认证方式,包括本地认证(使用用户名和密码)、OAuth认证、OpenID认证等等。以下是一个使用Passport进行本地认证的例子:
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
使用Passport进行认证需要先定义一个认证策略(Strategy)。上面的代码中使用了本地认证策略(LocalStrategy),并实现了一个回调函数,用于根据用户名和密码查询数据库中的用户信息。如果找到用户并且密码正确,则调用done函数并将用户信息作为参数传入,否则调用done函数并传入false表示认证失败。
在实际使用中,可以在登录页面提交表单时调用passport.authenticate方法进行认证:
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
上面的代码中,passport.authenticate方法会调用上面定义的LocalStrategy进行认证。如果认证成功,则重定向到首页,否则重定向到登录页面。
在Node.js中,可以使用中间件(middleware)进行权限控制。以下是一个简单的权限控制中间件的例子:
function requireLogin(req, res, next) {
if (req.user) {
next();
} else {
res.redirect('/login');
}
}
上面的代码中,requireLogin函数用于检查用户是否登录。如果用户已经登录,则调用next函数将请求传递给下一个中间件或路由处理函数;否则重定向到登录页面。
要使用这个中间件,可以将它作为路由处理函数的前置中间件:
app.get('/dashboard', requireLogin, function(req, res) {
res.render('dashboard');
});
上面的代码中,/dashboard路由的处理函数前面使用了requireLogin中间件,因此只有登录用户才能访问该页面。