2014-05-19 66 views
1

我想在我的應用程序流程如下返回的accessToken在passport.js

  1. 用戶選擇與谷歌
  2. 我重定向到谷歌,並獲得認證的回調(發生這種情況使用Passport)

我現在想要以響應用戶的形式返回特定於我的應用程序的身份驗證令牌。

var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy; 

passport.use(new GoogleStrategy({ 
    clientID: GOOGLE_CLIENT_ID, 
    clientSecret: GOOGLE_CLIENT_SECRET, 
    callbackURL: "http://127.0.0.1:3000/auth/google/callback" 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    // RETURN ACCESS TOKEN IN THE RESPONSE 
    } 
)); 

我得到了成功回調,但我不知道如何返回從回調函數的自定義訪問令牌/響應。

我猜)與使用的有(回答,或序列化和反序列化這我不是從文檔或任何例子清楚。你能否也請解釋如何完成()或序列化或反序列化。

回答

0

你可以在序列化和反序列化中做到這一點。看到這個passport example

userSchema.methods.generateRandomToken = function() { 
    var user = this, 
    chars = "_!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 
    token = new Date().getTime() + '_'; 

    for (var x = 0; x < 16; x++) { 
    var i = Math.floor(Math.random() * 62); 
    token += chars.charAt(i); 
    } 
    return token; 
}; 

var User = mongoose.model('User', userSchema); 

//serialize 
passport.serializeUser(function (user, done){ 
     var createAccessToken = function() { 
      var token = user.generateRandomToken() 
      User.findOne({ 
       accessToken: token 
      }, function(err, existingUser){ 
       if (err) { return done(err) } 
       if (existingUser) { 
        createAccessToken() 
       } else { 
        user.set('accessToken', token) 
        user.save(function(err){ 
         if (err) { return done(err) } 
         return done(null, user.get('accessToken')) 
        }) 
       } 
      }) 
     } 

     if (user._id) { 
      createAccessToken() 
     } 
    }) 


//deserialize 
passport.deserializeUser(function(token, done){ 
     User.findOne({ 
      accessToken : token 
     }, function(err, user){ 
      done(err, user) 
     }) 
    }) 
相關問題