app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const passport = require('passport'); // 追加
const LocalStrategy = require('passport-local').Strategy; // 追加
const session = require('express-session'); // 追加
const mysql = require('mysql2/promise'); // 追加
const flash = require('connect-flash'); // 追加
const db_conf = require('./db'); // 追加
const pool = mysql.createPool(db_conf); // 追加
var indexRouter = require('./routes/index');
var userRouter = require('./routes/user'); // 追加
var contentRouter = require('./routes/content'); // 追加
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(session({
secret: 'secret_key',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize()); // 追加
app.use(passport.session()); // 追加
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(flash()); // 追加
// 追加
passport.serializeUser(function(user, done) {
done(null, user);
});
// 追加
passport.deserializeUser(function(user, done) {
done(null, user);
});
// 追加
passport.use(new LocalStrategy({
usernameField:'email',
passwordField:'password',
passReqToCallback: true
},
( req, email, password, done) => {
(async () => {
try {
const [results, fields] = await pool.query('SELECT * FROM users');
console.log(results);
console.log(results[0].mail);
console.log(results[0].password);
console.log(password);
if(email !== results[0].mail && password !== results[0].password){
return done(null, false, { message: 'メールアドレスとパスワードが違っています' });
} else if(email !== results[0].mail){
return done(null, false, { message: 'メールアドレスが違っています' });
} else if(password !== results[0].password){
return done(null, false, { message: 'パスワードが違っています' });
} else {
console.log("mail" + email)
return done(null, email);
}
} catch (err) {
console.log(err);
}
pool.end();
})();
}
));
app.use('/', indexRouter);
app.use('/user', userRouter); // 追加
app.use('/content', contentRouter); // 追加
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
LocalStrategy 内の認証が失敗した時の処理の done() の第3引数に { message : String } を渡すと、flash メッセージが蓄積され、「 req.flash('error') 」で呼び出せます。