在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中间件,因此只有登录用户才能访问该页面。