Node.js Passport login

Sever/Node.js 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(nullnull);
    }
}
 
 
//로컬 저장소 사용 
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



반응형

'Sever > Node.js' 카테고리의 다른 글

jwt 스터디 1차  (0) 2019.01.02
jwt  (0) 2019.01.01
Study : Express, RESTful API  (0) 2018.10.24
카페24 node.js + mysql + unity 연동 (CRUD, RestfulAPI)  (4) 2018.10.22
node.js + mysql + Unity 연동  (0) 2018.10.19
: