获取“无法序列化用户”的错误,但从不调用passport.serializeUser

时间:2016-06-22 00:38:31

标签: mysql node.js sails.js passport.js passport-local

我在为我的应用程序添加护照的斗争仍在继续!我得到它,以便我不再得到我之前看到的疯狂巨大错误,但应用程序只是输出{}。因此,在输入尽可能多的console.log()语句后,我将其缩小到应用程序说它无法序列化用户对象这一事实,但据我所知{{1永远不会调用函数。

GitHub link with all files (other than node modules)

当然,我不是百分之百关于护照的工作方式,而且我是Node的新手,但是他有多年的其他语言经验,所以如果我需要,我可以手工做,但我会我更喜欢使用护照,因为它允许我最终使用Facebook和Google auth而不必重新制作轮子,可以这么说。

错误

这是确切的错误:

  

护照策略jhechtf(密码)

     

用户找到了

     

密码很好

     

护照认证:jhechtf

     

Passport Authenticate Err:null

     

Passport身份验证信息:{message:'登录成功'}

     

AuthController错误:[错误:无法将用户序列化为会话]

现在我用Google搜索“几乎无法将用户序列化为会话passport.js”几乎每个可以想象的术语,但每次它似乎总是与passport.serializeUser()而不是deserializeUser有关。让我感到震惊的一件事是,serializeUser来自console.log()的{​​{1}}来电在任何时间都没有出现。

AuthController.js

serializeUser()

配置/ passport.js

var passport = require('passport');

module.exports = {

    _config: {
        actions: false,
        shortcuts: false,
        rest: false
    },

    login: function (req, res) {

        passport.authenticate('local', function (err, user, info) {
            if(user==false){
                return res.status(403).send(info);
            }

            console.log("Passport Authenticate : ", user.username);
            console.log("Passport Authenticate Err: ", err);
            console.log("Passport Authenticate Info: ", info);
            req.logIn(user, function (err) {
                if (err) {  
                    console.log("AuthController Error: " , err);
                    return res.status(401).send(err);
                }
                //Assume a correct login?

                var red = req.session.redirectTo || '/'; 
                //get the redirection value if it was set.
                delete req.session.redirectTo;
                //Now that we've got it, delete it.
                res.redirect(red);
                //redirect
            });


        })(req, res);
    },

    logout: function (req, res) {
        req.logout();
        res.redirect('/');
    }
};

config / http.js(以防万一)

var passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy,
    bcrypt = require('bcrypt-nodejs');

passport.serializeUser(function (user, done) {
    console.log("Serialize User (passport.js) ", user);
//  if(user==false || user == undefined){
//      done({error:'user is not a user object, but is false or undefined'});
//  }
//  done(null, user.user_id);
    done(null,user.user_id);
});

passport.deserializeUser(function (id, done) {
    console.log("ID COMING IN AS: ", id);
    Users.findOne({
        user_id: id
    }, function (err, user) {
        return done(err, user);
    });
});

passport.use(new LocalStrategy({
        usernameField: 'username',
        passwordField: 'user_password'
    },
    function (un, password, done) {
        console.log("Passport Strategy ", un,password);

        Users.findOne({
            username: un
        }, function (err, user) {
            if (err) {
                console.log("USER.FINDONE ERROR ", err);
                return done(err,false,{message:'Can\'t find user'});
            }
            if (!user) {
                return done(null, false, {
                    message: 'Incorrect Username <small>Are you sure you signed up?</small>'
                });
            }
            console.log('user found');
            if (bcrypt.compareSync(password, user.user_password)) {
                console.log('passwords are good');
                return done(null, user, {
                    message: 'Logged In Successfully'
                });
            } else {
                return done(null, false, {
                    message: 'Invalid Password'
                });
            }

        });
    }
));

表的SQL

passportInit: require('passport').initialize(),
passportSession: require('passport').session(),

order: [
    'startRequestTimer',
    'cookieParser',
    'session',
    'myRequestLogger',
    'passportInit',
    'passportSession',
    'bodyParser',
    'handleBodyParserError',
    'compress',
    'methodOverride',
    'poweredBy',
    'router',
    'www',
    'favicon',
    '404',
    '500'
  ],

为你的时间和耐心而烦恼。

1 个答案:

答案 0 :(得分:1)

问题是您有两套用于Passport身份验证的库:SELECT `designs`.`id`, (SELECT `stores`.. ^^^^^// add comma 包(包括一些模型,控制器,路由等)和sails-auth + passport包(只是普通的Passport库)。看起来你实际上根本没有使用passport-local,但是它会挂钩你的应用程序并使自己的Passport配置。我想这就是为什么你的sails-auth功能永远不会被激活&#34;。

passport.serializeUser()文件和sails-auth目录中删除package.json以修复您的设置。