【问题标题】:How to authenticate a user server-side with Passport JS?如何使用 Passport JS 对用户服务器端进行身份验证?
【发布时间】:2015-01-06 23:05:40
【问题描述】:

我想通过生成一个随机的用户名和密码来自动生成用户帐户,然后用户自动登录(用户不知道他的用户名/密码,他的浏览器只是存储会话cookie)。

Passport 用作中间件,那么如何验证我刚刚生成的用户呢?或者,以某种方式重定向到我的app.post('/login') 路由并发送这些变量会更好吗? (但以某种方式将这些发送到浏览器,只是为了发送回服务器似乎不太安全或高效)。

app.get('/signup', function(req, res) {
if(req.isAuthenticated()) { res.redirect('/'); }
else {
    var today = new Date();
    var weekDate = new Date();
    weekDate.setDate(today.getDate() + 7);

    var key1 = Math.random().toString();
    var key2 = Math.random().toString();
    var hash1 = crypto.createHmac('sha1', key1).update(today.valueOf().toString()).digest('hex');
    var hash2 = crypto.createHmac('sha1', key2).update(weekDate.valueOf().toString()).digest('hex');

    var newUser = new models.User({
        username: hash1,
        password: hash2,
        signupDate: today,
        accountStatus: 0,
        expirationDate: weekDate,
    });

    newUser.save(function(err) {
        if(err) {}
        console.log("New user created.");

        //HOW CAN I PASS USERNAME AND PASSWORD ARGUMENTS???
        passport.authenticate('local')();
        res.redirect('/login');
    })
}
});

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    将您对 passport.authenticate('local')(); 的呼叫替换为

    req.logIn(user, function(err) {
      if (err) { return next(err); }
      //copied from the docs, you might want to send the user somewhere else ;)
      return res.redirect('/users/' + user.username); 
    });
    

    然后告诉我这是怎么回事。

    【讨论】:

    • 非常感谢!我希望这在 Passport 文档中更加明显。
    • 我同意,它很隐蔽,我记得也很难找到它。
    【解决方案2】:

    rdrey 的回答非常有帮助。对大多数人来说可能很明显但对我来说不是的一个细节是模型 .save () 出错并且回调中的记录。所以整个模式是

    newuser.save(function(err,user) {
    req.logIn(user, function(err) {
    if (err) { return next(err); }
    //copied from the docs, you might want to send the user somewhere else ;)
    return res.redirect('/users/' + user.username); 
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-02
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2020-08-04
      • 1970-01-01
      • 2018-02-04
      相关资源
      最近更新 更多