我可以在Passport策略中使用Salt而不是纯文本密码吗?

时间:2017-07-29 17:57:40

标签: node.js express authentication passport.js

这是我的Passport js本地策略:

'use strict';

/**
 * Module dependencies.
 */
var passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy,
    User = require('mongoose').model('User');

module.exports = function() {
    // Use local strategy
    passport.use(new LocalStrategy({
            usernameField: 'username',
            passwordField: 'password'
        },
        function(username, password, done) {
            User.findOne({
                //username: new RegExp(username, 'i')
                username: String(username).toLowerCase()
            }, function(err, user) {
                if (err) {
                    console.log('ERR: ', err);
                    return done(err);
                }
                if (!user) {
                    return done(null, false, {
                        message: 'Unknown user or invalid password'
                    });
                }
                if (!user.authenticate(password)) {
                    return done(null, false, {
                        message: 'Unknown user or invalid password'
                    });
                }
                return done(null, user);
            });
        }
    ));
};

我需要使用电子邮件和加密密码(存储在localStorage中)在webview(而不是浏览器)中重新验证我的用户。

在使用散列/ salt密码重新验证用户的策略中,我会更改哪些内容? (或者这是一个可怕的想法?)

1 个答案:

答案 0 :(得分:3)

默认情况下使用passportjs,您的密码将被加盐+哈希,并且此结果将存储在您的数据库中,因此您绝不使用此技术的纯文本密码

接下来,在localstorage中存储密码(甚至是盐渍的)是一种不好的做法。您应该只询问您的用户他的密码,并且永远不要存储它!最好的方法是存储令牌并检查它是否是有效的(jwt令牌很棒)

一个例子:https://scotch.io/tutorials/easy-node-authentication-setup-and-local