2014-05-19 80 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) 
     }) 
    }) 
相关问题