2015-09-24 12 views
6

Tôi đang sử dụng hộ chiếu-facebook để đăng nhập vào ứng dụng web MEAN stack. Sau khi đăng nhập thành công, tôi muốn tạo một Mã Web JSON (jwt) và chuyển hướng đến một trang trong SPA của tôi. (res.redirect ('/ #/posts /' + doc.generateJWT()); - vui lòng xem mã được liên kết bên dưới).Cách trả lại mã thông báo web json (jwt) với hộ chiếu-facebook mà không hiển thị nó trong url chuyển hướng

Câu hỏi của tôi là: Làm cách nào để gửi JWT đến trang chuyển hướng mà không hiển thị nó trong URL?

Code:

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

passport.deserializeUser(function(obj, done) { 
    done(null, obj); 
}); 


passport.use(new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: FACEBOOK_CALLBACKURL 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    process.nextTick(function() { 
     User.findOne({'fbid':profile.id},function(err, docs) {     
       if (err){ 
       //console.log('Error in SignUp: '+err); 
       return res.status(401).json(info); 
       }     
       else { 
        if (docs) { 
         //console.log('User already exists'); 
         globalid = profile.id; 
         return done(null,docs); 
        } else { 
         // if there is no user with that fbid 
         // create the user 
         var newUser = new User(); 
         // set the user's local credentials 
         newUser.fbid = profile.id; 
         globalid = profile.id; 

         newUser.firstname = profile.name.givenName; 
         newUser.lastname = profile.name.familyName; 
         newUser.gender = profile.gender; 
         if(profile.emails){ 
         newUser.fbemail = profile.emails[0].value; 
         }; 
         newUser.fblink = profile.profileUrl; 
         newUser.fbverified = profile.verified; 

         // save the user 
         newUser.save(function(err) { 
          if (err){ 
          //console.log('Error in Saving user: '+err); 
          return res.status(401).json(info); 
          } 
          //console.log('User Registration succesful'); 
          return done(null, newUser); 
         }); 
        } 
       } 
       }); 
    }); 
})); 

var router = express.Router(); 

router.get('/auth/facebook', 
    passport.authenticate('facebook', { scope : 'email' } 
)); 

router.get('/auth/facebook/callback', 
    passport.authenticate('facebook', { session: false, failureRedirect: '/'}), 
    function(req, res,done) { 
    var redirection = true; 
    User.findOne({ 'fbid': globalid }, function (err, doc){ 
      //console.log("Generating token"); 
      doc.token = doc.generateJWT(); 
      doc.save(function(err) { 
       if (err){ 
       //console.log('Error in Saving token for old user: '+err); 
       return res.status(401).json(info); 
       } 
      else 
      { 
       //console.log('User Login succesful'); 
       redirection = doc.mobileverified; 
       //console.log(redirection); 
       //return done(null, doc); 
       if(doc.mobileverified === true){ 
        console.log("Token:",doc.generateJWT());      
        res.redirect('/#/posts/'+ doc.generateJWT()); 
       } 
       else{ 

        console.log("Token:",doc.generateJWT()); 
        //res.json({token: doc.generateJWT()}); 
        res.redirect('/#/register/' + doc.generateJWT());           
       } 
      } 
      }); 
     }); 
    }); 

Nhiều Cảm ơn trước!

Trả lời

14

Nếu bạn không muốn hiển thị dấu hiệu của bạn trên url bạn phải gửi câu trả lời như json

var fbOptions = { 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: FACEBOOK_CALLBACKURL 
}; 
passport.use(new FacebookStrategy(fbOptions, function(token, refreshToken, profile, done) { 
    var user = profile; 
    // NOTE: ‘my_token’ we will use later 
    user.my_token = 'generate your jwt token'; 
    done(null, user); 
})); 

Và sau đó trên router của bạn trả lại thẻ như json

app.get('/auth/facebook/callback', passport.authenticate('facebook', {session: false, failureRedirect : '/'}), function(req, res) { 
// The token we have created on FacebookStrategy above 
var token = req.user.my_token; 
res.json({ token: token }); 
}); 
+0

Trên thực tế ngay cả khi bạn gửi nó như là một tiêu đề trong JSON, nó là không thể cho một khách hàng để có được giữ nó do gọi lại. –

Các vấn đề liên quan