Sever/Node.js
Node.js Passport login
일등하이
2018. 12. 20. 17:52
반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | var fs = require('fs'); var https = require('https'); var express = require('express'); var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser'); var passport = require('passport'); var passportLocal = require('passport-local'); var passportHttp = require('passport-http'); var expressSession = require('express-session'); var app = express(); var server = https.createServer({ cert: fs.readFileSync(__dirname + '/my.crt'), key: fs.readFileSync(__dirname + '/my.key') }, app); app.set('view engine', 'ejs'); //passport 사용전에 등록 할것. app.use(bodyParser.urlencoded({ extended: false})); app.use(cookieParser()); app.use(expressSession( { secret: process.env.session || 'secret' , resave: false, saveUninitialized: false } )); app.use(passport.initialize()); app.use(passport.session()); function verifyCredentionals(username, password, done){ //Pretend this is using a real database! if( username == password ) { done(null, { id: username, name: username }); }else{ done(null, null); } } //로컬 저장소 사용 passport.use(new passportLocal.Strategy(verifyCredentionals)); passport.use(new passportHttp.BasicStrategy(verifyCredentionals)); passport.serializeUser((user, done)=>{ done(null, user.id); }); passport.deserializeUser((id, done)=>{ //Query database or chache here! done(null, {id:id, name:id}); }); function ensureAuthenticated(req, res, next){ if( req.isAuthenticated() ) { next(); } else { //res.redirect('/login'); res.sendStatus(403); } } app.get('/', function(req, res){ res.render('index', { isAuthenticated: req.isAuthenticated(), user: req.user }); }); app.get('/login', (req, res)=>{ res.render('login'); }); app.post('/login', passport.authenticate('local'),(req, res)=>{ res.redirect('/'); }); app.get('/logout', (req, res)=>{ req.logout(); res.redirect('/'); }); app.use('/api', passport.authenticate('basic', { session : true })); app.get('/api/data', ensureAuthenticated, (req, res)=>{ res.json([ { value : 'foo' }, { value : 'foo' }, { value : 'foo' }, { value : 'foo' } ]); }); var port = process.env.port || 1337; // app.listen(port, ()=>{ // console.log('127.0.0.1:' + port + '/'); // }); server.listen(port, ()=>{ console.log('127.0.0.1:' + port + '/'); }); | cs |
반응형