change folder structure

This commit is contained in:
Sukchan Lee 2017-05-21 23:02:16 +09:00
parent e845088aaf
commit 16f6147295
13 changed files with 89 additions and 90 deletions

View File

@ -18,7 +18,7 @@ export default ({ session, children }) => {
}
return (
<form id='signout' method='post' action='/auth/signout' onSubmit={logout}>
<form id='signout' method='post' action='/api/auth/signout' onSubmit={logout}>
<input name='_csrf' type='hidden' value={session.csrfToken} />
<button type='submit'>{children}</button>
</form>

View File

@ -28,7 +28,7 @@ export default class extends React.Component {
if (session.user) {
loginMessage = (
<form id="signout" method="post" action="/logout" onSubmit={this.handleSubmit}>
<form id="signout" method="post" action="/api/auth/logout" onSubmit={this.handleSubmit}>
<input name="_csrf" type="hidden" value={session.csrfToken}/>
<p>
<Link prefetch href="/"><a className="home">Home</a></Link>Logged in as <strong><Link prefetch href="/login"><a>{session.user.username || session.user.role}</a></Link></strong>

View File

@ -41,7 +41,7 @@ export default class Session {
}
let xhr = new XMLHttpRequest()
xhr.open('GET', '/csrf', true)
xhr.open('GET', '/api/auth/csrf', true)
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
@ -91,7 +91,7 @@ export default class Session {
// to true then revalidate it by fetching it again from the server.
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest()
xhr.open('GET', '/session', true)
xhr.open('GET', '/api/auth/session', true)
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
@ -132,7 +132,7 @@ export default class Session {
this._session.csrfToken = await Session.getCsrfToken()
let xhr = new XMLHttpRequest()
xhr.open('POST', '/login', true)
xhr.open('POST', '/api/auth/login', true)
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = async () => {
if (xhr.readyState === 4) {
@ -160,7 +160,7 @@ export default class Session {
}
let xhr = new XMLHttpRequest()
xhr.open('POST', '/logout', true)
xhr.open('POST', '/api/auth/logout', true)
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = async () => {
if (xhr.readyState === 4) {

View File

@ -22,8 +22,8 @@
"sqlite3": "^3.1.8"
},
"scripts": {
"dev": "node server.js",
"dev": "node server/index.js",
"build": "next build",
"start": "NODE_ENV=production node server.js"
"start": "NODE_ENV=production node server/index.js"
}
}

View File

@ -80,7 +80,7 @@ export default class extends Page {
} else {
signinForm = (
<div>
<form id="signin" method="post" action="/login" onSubmit={this.handleSubmit}>
<form id="signin" method="post" action="/api/auth/login" onSubmit={this.handleSubmit}>
<input name="_csrf" type="hidden" value={this.state.session.csrfToken}/>
<h3>Sign in with email</h3>
<p>

View File

@ -1,39 +0,0 @@
const express = require('express');
const next = require('next');
const models = require('./models');
const auth = require('./routes/auth');
const dev = process.env.NODE_ENV != 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare()
.then(() => {
const server = express();
models.sequelize.sync()
.then(() => {
auth.configure({
app: app,
server: server,
secret: process.env.SESSION_SECRET
});
server.get('*', (req, res) => {
return handle(req, res);
});
// Set vary header (good practice)
// Note: This overrides any existing 'Vary' header but is okay in this app
server.use(function (req, res, next) {
res.setHeader('Vary', 'Accept-Encoding')
next()
});
server.listen(3000, err => {
if (err) throw err;
console.log('> Ready on http://localhost:3000');
});
})
})
.catch(err => console.log(err));

View File

@ -1,21 +1,26 @@
const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV != 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const bodyParser = require('body-parser');
const session = require('express-session');
const SequelizeStore = require('connect-session-sequelize')(session.Store);
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const csrf = require('lusca').csrf();
const models = require('../models');
exports.configure = ({
app = null,
server = null,
secret = 'change-me',
store = new SequelizeStore({ db: models.sequelize, table: 'Session' }),
maxAge = 60000 * 60 * 24 * 7 * 4, // 4 weeks
clientMaxAge = 60000 // 60 seconds
} = {}) => {
if (!app) throw new Error('Null param')
if (!server) throw new Error('Null param')
const models = require('./models');
const api = require('./routes');
app.prepare()
.then(() => {
return models.sequelize.sync();
})
.then(() => {
const server = express();
models.UserRole.count().then(c => {
if (c == 0) {
@ -35,14 +40,14 @@ exports.configure = ({
server.use(bodyParser.urlencoded({ extended: true }));
server.use(session({
secret: secret,
store: store,
secret: 'change-me',
store: new SequelizeStore({ db: models.sequelize, table: 'Session' }),
resave: false,
rolling: true,
saveUninitialized: true,
httpOnly: true,
cookie: {
maxAge: maxAge
maxAge: 60000 * 60 * 24 * 7 * 4 // 4 weeks
}
}));
@ -81,33 +86,22 @@ exports.configure = ({
server.use(passport.initialize());
server.use(passport.session());
server.get('/csrf', (req, res) => {
return res.json({csrfToken: res.locals._csrf});
})
server.use('/api', api);
server.get('/session', (req, res) => {
let session = {
clientMaxAge: clientMaxAge,
csrfToken: res.locals._csrf
}
if (req.user) {
session.user = req.user
}
return res.json(session)
})
server.post('/login',
passport.authenticate('local', {
failureRedirect: '/error',
}),
(req, res) => {
res.redirect('/');
}
);
server.post('/logout', (req, res) => {
req.logout();
res.redirect('/');
server.get('*', (req, res) => {
return handle(req, res);
});
}
// Set vary header (good practice)
// Note: This overrides any existing 'Vary' header but is okay in this app
server.use(function (req, res, next) {
res.setHeader('Vary', 'Accept-Encoding')
next()
});
server.listen(3000, err => {
if (err) throw err;
console.log('> Ready on http://localhost:3000');
});
})
.catch(err => console.log(err));

View File

@ -0,0 +1,36 @@
const express = require('express');
const router = express.Router();
const passport = require('passport');
router.get('/csrf', (req, res) => {
return res.json({csrfToken: res.locals._csrf});
})
router.get('/session', (req, res) => {
let session = {
clientMaxAge: 60000, // 60 seconds
csrfToken: res.locals._csrf
}
if (req.user) {
session.user = req.user
}
return res.json(session)
})
router.post('/login',
passport.authenticate('local', {
failureRedirect: '/error',
}),
(req, res) => {
res.redirect('/');
}
);
router.post('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
module.exports = router;

View File

@ -0,0 +1,8 @@
const express = require('express');
const auth = require('./auth');
const router = express.Router();
router.use('/auth', auth);
module.exports = router;