CRUD + Auth MYSQL버전을 여러개의 파일로 나누기2
이제 더욱 간단히 데이터베이스부터 express모듈 passport모듈까지 모두 쪼개보자
var express = require('express');
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var bodyParser = require('body-parser');
app.set('views', './views/mysql');//jade 파일 루트
app.set('view engine', 'jade');//템플릿 엔진을 jade로 명시함//jade 파일 루트
app.use(bodyParser.urlencoded({ extended: false }));
secret: '1234DSFs@adf1234!@#$asd',
module.exports = function(app){
var conn = require('./db.js')();//같은 디렉토리이므로 ./임 함수니까 호출임
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var FacebookStrategy = require('passport-facebook').Strategy;
app.use(passport.initialize());
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 conn = mysql.createConnection({
module.exports = function(app){
var conn = require('./db.js')();//같은 디렉토리이므로 ./임 함수니까 호출임
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var FacebookStrategy = require('passport-facebook').Strategy;
app.use(passport.initialize());
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){
module.exports = function(passport){//넘겨진 패스포트를 받음
var bkfd2Password = require("pbkdf2-password");
var conn = require('../../config/mysql/db')();//같은 디렉토리이므로 ./임 함수니까 호출임
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 app = require('./config/mysql/express')();//반드시 함수로 해야됨
var passport = require('./config/mysql/passport')(app);//반드시 패스포트는 위쪽에 써야됨
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>
var auth = require('./routes/mysql/auth')(passport);//auth.js파일 불러옴 passport를 함수의인자로 넘겨줌
app.use('/auth/', auth);//auth로 접근하는 모든 접근을 auth라는 라우터로 위임함
console.log('Connected 3003 port!!!');
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')
'프로그래밍 > 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버전을 여러개의 파일로 나누기 1 (0) | 2016.12.13 |
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 |