簡體   English   中英

在Node中存儲護照Facebook會話

[英]Storing passport facebook session in Node

我正在嘗試按照passport-facebook GitHub上的示例設置Facebook身份驗證,但是我沒有獲取要存儲的會話。 一旦我登錄Facebook並重定向回“ /”,就沒有證據表明我已登錄我的應用程序。 當我在Facebook上登錄成功時,由於它會將我引導回到successRedirect路線,因此似乎丟失了保存會話所需的代碼。

在我的app.js文件中,我有以下內容。

       var express = require("express"),
            bodyParser = require("body-parser"),
            passport = require("./auth/local"),
            FacebookStrategy = require("passport-facebook"),
            LinkedInStrategy = require("passport-linkedin"),
            GoogleStrategy = require("passport-google"),
            cookieParser = require('cookie-parser'),
            session = require("express-session"),
            fbStrategy = require("./auth/facebook");
    var  app = express();

app.use(cookieParser());
app.use(session({
    resave: true,
    saveUninitialized: true
}));

app.use(express.static(__dirname + "/public"));
app.set("view engine","ejs");

app.use(passport.initialize());
app.use(passport.session());

app.get('./auth/facebook', 
  fbStrategy.authenticate('facebook'
));

app.get('./auth/facebook/callback',
  fbStrategy.authenticate('facebook', {
      successRedirect: "/",
      failureRedirect: '/login' })
);

在路由/auth/facebook.js中,我有以下代碼

   var passport = require('passport'),
        FacebookStrategy = require('passport-facebook'),
        authHelpers = require("./_helpers");

    var init = require('./passport');

    init();

    passport.use(new FacebookStrategy({
        clientID: [...],
        clientSecret: [...],
        callbackURL: "callbackurl",
        //for profFields look here for definitions... https://developers.facebook.com/docs/graph-api/reference/v2.5/user
        profileFields: ['id','first_name','last_name','gender','political','verified','currency','birthday']
      },
      function(accessToken, refreshToken, profile, done) {
        function(accessToken, refreshToken, profile, cb) {
function(accessToken, refreshToken, profile, done) {
  knex('user').select('email','user_id').where({facebookID:profile.id})
  .then((user) => {
    if (user.length==0) {
      knex('user').insert({
      email: profile.emails[0].value, 
      facebookID:profile.id,
      firstname: profile.name.givenName, 
      lastname: profile.name.familyName
      })
      return done(null,user);
    } else {
      return done(null, user);
    }
  })
  .catch((err) => {console.log("problem near line 24 in auth/facebook.js... "+err); return done(err); });
       }
    }));



module.exports = passport;

我的數據庫配置在其他任何地方都能正常工作,因此我沒有在上述代碼片段中包括配置代碼/文件。

請在https://github.com/rupalipemare/Todo-Demo上檢查代碼,這里有完整的示例,演示了使用local,facebook和google進行護照認證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM