【问题标题】:Always getting error on passport.js callbackpassport.js 回调总是出错
【发布时间】:2017-04-18 13:46:38
【问题描述】:

我正在尝试使用 passport.js、Sequelize 和 Node 创建一个松弛登录。

但我总是在返回时出错。 这些是我的规则:

app.get('/auth/slack',
        passport.authorize('slack'));

app.get('/auth/slack/callback', 
        passport.authorize('slack', { failureRedirect: '/login' }),
        function(req, res) {
            res.redirect('/dashboard');
        }
    );

这是我的 passport.js:

passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done) {
        console.log("abc deserializeUser");
        User.findById(id).then(function(user){
            done(null, user);
        }).catch(function(e){
            done(e, false);
        });
    });

passport.use('slack', new SlackStrategy({
        clientID: process.env.SLACK_ID,
        clientSecret: process.env.SLACK_SECRET,
        callbackURL: process.env.SLACK_REDIRECT,
        scope: "incoming-webhook users:read"
    },
        function(req, accessToken, refreshToken, profile, done) {

            var values = { 
                where: { slack_id: profile.id }, 
                defaults: {slack_id: profile.id, name: profile.displayName} 
            };      
            User.findOrCreate(values)
            .spread(function(user, created) {
                return done(user);
            });

        }
    ));

我总是得到这个作为回报

[object SequelizeInstance:User]

如何解决这个问题?

【问题讨论】:

    标签: javascript node.js passport.js sequelize.js


    【解决方案1】:

    done 回调接收第一个参数作为错误,第二个作为用户,第三个作为闪存消息。所以你应该将用户作为第二个参数传递

            User.findOrCreate(values)
            .spread(function(user, created) {
                return done(null, user);
            }).catch(function(error){
                return done(error); 
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-18
      • 2015-10-03
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多