1. 程式人生 > >react +webpack+express router實現登入與頁面跳轉

react +webpack+express router實現登入與頁面跳轉

5、express app 利用passport實現登入驗證與跳轉

var express = require('express');
var app= express();

var passport = require('passport');
var Strategy = require('passport-local').Strategy;

//react提交的表單資訊進行驗證
passport.use(new Strategy(
  function (username, password, done) {
    if(username == 'test' && password =='test'){
      done(null,{id:1234,name:username});//done相當於一個快取器,接下來在passort中serializeUser中取出 
    }else {
      console.log('no user');
      done(null, false, { message: 'Incorrect username.' })
    }
  }));

passport.serializeUser(function (user, done) {
  let sessioninfo = {
    uid: user.id,
    username: user.name
  }
  done(null, sessioninfo);//頁面跳轉前的session儲存

});
//載入下一頁面是的session儲存
passport.deserializeUser(function (user, done) {
  if (user != null) {
    done(null, user);
  } else {
    console.log('no user');
    done(null, false, { message: 'Incorrect userid.' })
  }
});
//app在任何時候均會載入這個檔案,對這個檔案進行限制,即可完成跳轉
app.use(function (req, res, next) {

  if (req.url != '/login' && (!req.session || !req.session.passport || !req.session.passport.user)) {
    res.redirect('/login');
  }
  next();
})


//主頁面/,進入jade中的index
app.get('/',
  function (req, res) {
    res.render('index', { title: 'index', user: JSON.stringify(req.session.passport) });
  });


app.get('/login',
  function (req, res) {
    res.render('login');
  });
//獲取react中form提交的表單資訊,利用passport.authenticate進行驗證
app.post('/login',
  function (req, res, next) {
    passport.authenticate('local', function (err, user, info) {
      if (err) { return next(err); }
      //驗證失敗,仍在login頁面
      if (!user) { return res.redirect('/login'); }
      req.logIn(user, function (err) {
        if (err) { return next(err); }
        //驗證成功跳轉到主頁面
        return res.redirect('/');
      });
    })(req, res, next);
  })

app.get('/me', function (req, res) {

  console.log(req.url);
  console.log(req.session);
  console.log(req.session.passport);
  res.send(JSON.stringify(req.session.passport));
})

app.get('/logout',
  function (req, res) {
    req.logout();
    res.redirect('/');
  });

module.exports = app;