2017-02-07 13 views
0

この問題は狂っています。私はPassport jsをGoogle oAuth 2.0戦略と一緒にセットアップしただけで、ローカルのExpress 4サーバーで完璧に動作します。Passport認証はローカルでは動作しますが、リモートサーバーでは動作しません

しかし、私は私のアマゾンサーバー偽たびに返し、req.userが定義されていないコールreq.isAuthenticated()でそれを実行してみてください。私は何が間違っているのか理解できません。

passport.serializeUser(function(user, done) { 
    console.log("serializeUser " + user.id); 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    console.log("deserializeUser: " + id); 
    User.find({_id: id}, function (error, user) { 
     if (error || !user) { 
      done(error, null); 
     } else { 
      done(null, user); 
     } 
    }); 
}); 

passport.use(new GoogleStrategy({ 
    clientID: config.google.clientID, 
    clientSecret: config.google.clientSecret, 
    callbackURL: config.google.callbackURL 
}, 
function(accessToken, refreshToken, profile, done) { 

    process.nextTick(function() { 

     if(profile._json.domain === 'xxx'){ 

      var query = {googleId: profile.id}; 
      var options = {upsert: true, new: true, setDefaultsOnInsert: true }; 

      // Find the document 
      User.findOneAndUpdate(query, query , options, function (error, user) { 
       if (error) { 
        return done(error); 
       } 
       return done(null, user); 
      }); 
     }else{ 
      return done(new Error("Invalid host domain")); 
     } 
    }); 

} 
)); 

router.get('/auth/google', 
    passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login', 'https://www.googleapis.com/auth/userinfo.email'] })); 

router.get('/auth/google/callback', 
    passport.authenticate('google', { failureRedirect: '/login' }), function(req, res) { 
     res.redirect('/'); 
}); 

router.get('/login', ensureAuthenticated, function(req, res){ 
    console.log("User is Authenticated"); 
}); 

function ensureAuthenticated(req, res, next) { 

    console.log("USER " + req.user); 

    if (req.isAuthenticated()) { 
     console.log("Authorized"); 
     return next(); 
    } else { 
     console.log("Not authorized"); 
     res.sendStatus(401); 
    } 

} 

これはExpressサーバーのconfです。

/ Express 
var app = express(); 
app.use(cookieParser('xxx')); 

app.use(bodyParser.json({limit: '100mb'})); 
app.use(bodyParser.urlencoded({limit: '100mb', extended: true})); 

// Used for production build 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use(session({ 
    store: sessionStore, //var sessionStore = new MemoryStore(); 
    secret: 'xxx', 
    resave: true, 
    saveUninitialized: true, 
    cookie: { 
     secure: false, 
     path: '/', 
     httpOnly: true, 
     maxAge: new Date(Date.now() + 3600000), 
    } 
})); 

// Compress responses 
app.use(compression()); 

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

routes(app); 

Similar problem

助けてください!

答えて

1

を認証するために、あなたのAmazonはGoogleのコンソールへのURIをリダイレクト追加してください。私は将来あなたのために時間を節約することを願っています。

// Express 
var app = express(); 
app.use(cookieParser('xxx')); 

app.use(bodyParser.json({limit: '100mb'})); 
app.use(bodyParser.urlencoded({limit: '100mb', extended: true})); 

// Used for production build 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use(session({ 
    cookieName: 'session', 
    duration: 30 * 60 * 1000, 
    activeDuration: 5 * 60 * 1000, 
    store: new MongoStore({ 
     mongooseConnection: mongoose.connection, 
     touchAfter: 24 * 3600 // time period in seconds 
    }), 
    secret: 'xxx', 
    saveUninitialized: false, // don't create session until something stored 
    resave: false, //don't save session if unmodified 
    cookie: { 
     secure: false, 
     path: '/', 
     httpOnly: true, 
     maxAge: new Date(Date.now() + 3600000), 
    } 
})); 
関連する問題