react +webpack+express router實現登入與頁面跳轉
阿新 • • 發佈:2019-02-07
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;