CRUD + Auth mysql 버전을 여러개의 파일로 나누기1
처음에는 login페이지와 register 페이지를 jade로 분할해보자
form(action='/auth/login', method='post')
input(type='text', name='username', placeholder='username')
input(type='password', name='password', placeholder='password')
a(href='/auth/facebook') facebook
/views/mysql/auth/register.jade
form(action='/auth/register', method='post')
input(type='text', name='username', placeholder='username')
input(type='password', name='password', placeholder='password')
input(type='text', name='displayName', placeholder='displayName')
var express = require('express');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var bodyParser = require('body-parser');
var bkfd2Password = require("pbkdf2-password");
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var FacebookStrategy = require('passport-facebook').Strategy;
var conn = mysql.createConnection({
app.set('views', './views/mysql');//jade 파일 루트
app.set('view engine', 'jade');//템플릿 엔진을 jade로 명시함//jade 파일 루트
app.use(bodyParser.urlencoded({ extended: false }));
secret: '1234DSFs@adf1234!@#$asd',
app.use(passport.initialize());
app.get('/count', function(req, res){
res.send('count : '+req.session.count);
app.get('/auth/logout', function(req, res){
app.get('/welcome', function(req, res){
if(req.user && req.user.displayName) {
<h1>Hello, ${req.user.displayName}</h1>
<a href="/auth/logout">logout</a>
<li><a href="/auth/login">Login</a></li>
<li><a href="/auth/register">Register</a></li>
passport.serializeUser(function(user, done) {
console.log('serializeUser', user);
passport.deserializeUser(function(id, done) {
console.log('deserializeUser', id);
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, [id], function(err, results){
passport.use(new LocalStrategy(
function(username, password, done){
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, ['local:'+uname], function(err, results){
return done('There is no user.');
return hasher({password:pwd, salt:user.salt}, function(err, pass, salt, hash){
console.log('LocalStrategy', user);
passport.use(new FacebookStrategy({
clientID: '381822035542311',//개발자 페이지에서 APP ID 값
clientSecret: '5f8d7e59b8701fa64cf7343ebe8c0d8a',//개발자 페이지에서 App Secret값 입력
callbackURL: "/auth/facebook/callback",//다음 콜백 페이지
profileFields:['id', 'email', 'gender', 'link', 'locale',
'name', 'timezone', 'updated_time', 'verified', 'displayName']
function(accessToken, refreshToken, profile, done) {
var authId = 'facebook:'+profile.id;
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, [authId], function(err, results){
if(results.length>0){//사용자가 존재하면
'displayName':profile.displayName,
'email':profile.emails[0].value
var sql = 'INSERT INTO users SET ?';
conn.query(sql, newuser, function(err, results){
failureRedirect: '/auth/login',
failureRedirect: '/auth/login'
// salt:'O0iC9xqMBUVl3BdO50+JWkpvVcA5g2VNaYTR5Hc45g+/iXy4PzcCI7GJN5h5r3aLxIhgMN8HSh0DhyqwAp8lLw==',
app.post('/auth/register', function(req, res){
hasher({password:req.body.password}, function(err, pass, salt, hash){
authId:'local:'+req.body.username,
displayName:req.body.displayName
var sql = 'INSERT INTO users SET ?';
conn.query(sql, user, function(err, results){
req.login(user, function(err){
app.get('/auth/register', function(req, res){
app.get('/auth/login', function(req, res){
console.log('Connected 3003 port!!!');
그다음 소스 개선 방법 /auth로 시작하는 라우팅을 한곳에 모으자
module.exports = function(passport){//넘겨진 패스포트를 받음
var route = require('express').Router();//app을 route로 바꿔야됨
route.get('/logout', function(req, res){
// salt:'O0iC9xqMBUVl3BdO50+JWkpvVcA5g2VNaYTR5Hc45g+/iXy4PzcCI7GJN5h5r3aLxIhgMN8HSh0DhyqwAp8lLw==',
route.post('/register', function(req, res){
hasher({password:req.body.password}, function(err, pass, salt, hash){
authId:'local:'+req.body.username,
displayName:req.body.displayName
var sql = 'INSERT INTO users SET ?';
conn.query(sql, user, function(err, results){
req.login(user, function(err){
route.get('/register', function(req, res){
route.get('/login', function(req, res){
var express = require('express');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var bodyParser = require('body-parser');
var bkfd2Password = require("pbkdf2-password");
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var FacebookStrategy = require('passport-facebook').Strategy;
var conn = mysql.createConnection({
app.set('views', './views/mysql');//jade 파일 루트
app.set('view engine', 'jade');//템플릿 엔진을 jade로 명시함//jade 파일 루트
app.use(bodyParser.urlencoded({ extended: false }));
secret: '1234DSFs@adf1234!@#$asd',
app.use(passport.initialize());
app.get('/count', function(req, res){
res.send('count : '+req.session.count);
app.get('/welcome', function(req, res){
if(req.user && req.user.displayName) {
<h1>Hello, ${req.user.displayName}</h1>
<a href="/auth/logout">logout</a>
<li><a href="/auth/login">Login</a></li>
<li><a href="/auth/register">Register</a></li>
passport.serializeUser(function(user, done) {
console.log('serializeUser', user);
passport.deserializeUser(function(id, done) {
console.log('deserializeUser', id);
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, [id], function(err, results){
passport.use(new LocalStrategy(
function(username, password, done){
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, ['local:'+uname], function(err, results){
return done('There is no user.');
return hasher({password:pwd, salt:user.salt}, function(err, pass, salt, hash){
console.log('LocalStrategy', user);
passport.use(new FacebookStrategy({
clientID: '381822035542311',//개발자 페이지에서 APP ID 값
clientSecret: '5f8d7e59b8701fa64cf7343ebe8c0d8a',//개발자 페이지에서 App Secret값 입력
callbackURL: "/facebook/callback",//다음 콜백 페이지
profileFields:['id', 'email', 'gender', 'link', 'locale',
'name', 'timezone', 'updated_time', 'verified', 'displayName']
function(accessToken, refreshToken, profile, done) {
var authId = 'facebook:'+profile.id;
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, [authId], function(err, results){
if(results.length>0){//사용자가 존재하면
'displayName':profile.displayName,
'email':profile.emails[0].value
var sql = 'INSERT INTO users SET ?';
conn.query(sql, newuser, function(err, results){
var auth = require('./routes/mysql/auth')(passport);//auth.js파일 불러옴 passport를 함수의인자로 넘겨줌
app.use('/auth/', auth);//auth로 접근하는 모든 접근을 auth라는 라우터로 위임함
'프로그래밍 > Node.js' 카테고리의 다른 글
Node.js 생활코딩 정리 – CRUD + Auth MYSQL 버전 모두 합치기 (0) | 2016.12.19 |
---|---|
Node.js 생활코딩 정리 - CRUD + Auth MYSQL 버전 라우트 복잡도 낮추기 (0) | 2016.12.18 |
Node.js 생활코딩 정리 – CRUD + Auth MYSQL버전을 여러 개의 파일로 나누기3 (0) | 2016.12.16 |
Node.js 생활코딩 정리 – CRUD+Auth MYSQL버전을 여러개의 파일로 나누기2 (0) | 2016.12.14 |
Node.js 생활코딩 정리 – 사용자 정의 모듈 만들기 (0) | 2016.12.11 |
Node.js 생활코딩 정리 – jade extends 란? (0) | 2016.12.10 |
Node.js 생활코딩 정리 – Mysql을 이용한 Login 구현 (0) | 2016.12.09 |
Node.js 생활코딩 정리 – MYSQL을 이용한 회원가입(Register) (0) | 2016.12.08 |