使用Passport.js时如何在数据库中添加用户?如何修改现有路由以要求身份验证?

时间:2014-01-06 18:02:30

标签: javascript session authentication express passport.js

几个问题。我使用以下代码在我的应用程序中设置身份验证:

passport.use(new LocalStrategy(function(username, password, done){
    Users.findOne({ username : username},function(err,user){
        if(err) { return done(err); }
        if(!user){
            return done(null, false, { message: 'Incorrect username' });
        }

        hash( password, user.salt, function (err, hash) {
            if (err) { return done(err); }
            if (hash == user.hash) return done(null, user);
            done(null, false, { message: 'Incorrect password' });
        });
    });
}));

app.get('/admin', function (req, res){
    res.render('login.jade');
});

app.post('/admin', function (req, res){
    passport.authenticate('local', { successRedirect: '/main',
                                     failureRedirect: '/login',
                                     failureFlash: true });
});

用户是包含usernamepasswordhash的数据库架构。

第一个也是最明显的问题是,如何向数据库添加新用户?我特别不想要一个注册页面,但想手动添加每个新用户。有没有办法手动执行此操作?

接下来,如何修改现有路由,以便仅在用户通过身份验证后才能使用?例如,我有:

app.get('/comment/:commentID', admin.renderComment);

上面的renderCommit是一个大型处理函数,但只有在用户通过身份验证后才能访问此页面。我该如何检查?

1 个答案:

答案 0 :(得分:0)

从独立脚本中创建新用户应该相对简单:

// Load your models, set up database connection, etc.
...
// Create a new user:
Users.create({
  username : USERNAME,
  password : HASHED_PASSWORD,
  salt     : GENERATED_SALT,
}, function(err, user) {
  if (err) {
    console.error('Error creating user:', err.message);
  } else {
    console.log('User created successfully');
  }
});

至于确保用户在请求某些路线时登录,您可以使用a simple middleware for that

app.get('/comment/:commentID', ensureAuthenticated, admin.renderComment);