2017-02-07 5 views
0

Я схожу с ума по этой проблеме. Я только что установил Passport js вместе с Google oAuth 2.0, и он отлично работает на моем локальном сервере Express 4.Паспорт auth работает локально, но не на удаленном сервере

Но когда я пытаюсь запустить его на моем сервере Amazon вызова req.isAuthenticated() возвращает ложного каждый раз и req.user не определен. Я не могу понять, что случилось.

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); 
    } 

} 

И это экспресс-сервер 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

Пожалуйста, помогите!

ответ

0

Вы добавили сервер амазонки в список разрешенных URI перенаправления? Смотрите следующее: https://developers.google.com/adwords/api/docs/guides/authentication#oauth2_playground

Убедитесь, чтобы добавить Amazon перенаправления URI для консоли Google для того, чтобы аутентифицировать

+0

Да, перенаправление работает, насколько я могу судить. – hxmn

1

Я думаю, что моя проблема была решена путем переключения магазин Session в MongoStore вместо MemoryStore. Надеюсь, это сэкономит некоторое время для некоторых из вас в будущем.

// 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), 
    } 
})); 
Смежные вопросы