2016-12-03 12 views
1

passport.js、SequelizeおよびNodeでスラックログインを作成しようとしています。passport.jsコールバックで常にエラーが発生する

しかし、私はいつも戻ってくるとエラーが出ます。 これらは私のルールは以下のとおりです。

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] 

としてこれを取得していますか?

答えて

0

doneコールバックは最初のパラメータをエラーとして受け取り、2番目はユーザーとして、3番目はフラッシュメッセージとして受け取ります。したがって、ユーザーを2番目のパラメータとして渡す必要があります

 User.findOrCreate(values) 
     .spread(function(user, created) { 
      return done(null, user); 
     }).catch(function(error){ 
      return done(error); 
     }); 
関連する問題