summaryrefslogtreecommitdiff
path: root/app.js
diff options
context:
space:
mode:
authorWu Cheng-Han2016-12-02 01:58:14 +0800
committerWu Cheng-Han2016-12-02 01:58:14 +0800
commita73d9ce39e2107b2a9628003f05900d4a641bee5 (patch)
tree15778b1a6e3322bfe6e6c7a68f2c6e31f4c34844 /app.js
parent52772829ce8ccc7eac1fe1df9ace65d90ef36a2c (diff)
Update to support optional email register and signin
Diffstat (limited to 'app.js')
-rw-r--r--app.js47
1 files changed, 46 insertions, 1 deletions
diff --git a/app.js b/app.js
index da4278a1..91d8145c 100644
--- a/app.js
+++ b/app.js
@@ -17,6 +17,8 @@ var morgan = require('morgan');
var passportSocketIo = require("passport.socketio");
var helmet = require('helmet');
var i18n = require('i18n');
+var flash = require('connect-flash');
+var validator = require('validator');
//core
var config = require("./lib/config.js");
@@ -145,6 +147,8 @@ app.use(function (req, res, next) {
}
});
+app.use(flash());
+
//passport
app.use(passport.initialize());
app.use(passport.session());
@@ -362,6 +366,47 @@ if (config.google) {
failureRedirect: config.serverurl + '/'
}));
}
+// email auth
+if (config.email) {
+ app.post('/register', urlencodedParser, function (req, res, next) {
+ if (!req.body.email || !req.body.password) return response.errorBadRequest(res);
+ if (!validator.isEmail(req.body.email)) return response.errorBadRequest(res);
+ models.User.findOrCreate({
+ where: {
+ email: req.body.email
+ },
+ defaults: {
+ password: req.body.password
+ }
+ }).spread(function (user, created) {
+ if (user) {
+ if (created) {
+ if (config.debug) logger.info('user registered: ' + user.id);
+ req.flash('info', "You've successfully registered, please signin.");
+ } else {
+ if (config.debug) logger.info('user found: ' + user.id);
+ req.flash('error', "This email has been used, please try another one.");
+ }
+ return res.redirect(config.serverurl + '/');
+ }
+ req.flash('error', "Failed to register your account, please try again.");
+ return res.redirect(config.serverurl + '/');
+ }).catch(function (err) {
+ logger.error('auth callback failed: ' + err);
+ return response.errorInternalError(res);
+ });
+ });
+ app.post('/login', urlencodedParser, function (req, res, next) {
+ if (!req.body.email || !req.body.password) return response.errorBadRequest(res);
+ if (!validator.isEmail(req.body.email)) return response.errorBadRequest(res);
+ setReturnToFromReferer(req);
+ passport.authenticate('local', {
+ successReturnToOrRedirect: config.serverurl + '/',
+ failureRedirect: config.serverurl + '/',
+ failureFlash: 'Invalid email or password.'
+ })(req, res, next);
+ });
+}
//logout
app.get('/logout', function (req, res) {
if (config.debug && req.isAuthenticated())
@@ -389,7 +434,7 @@ app.get('/me', function (req, res) {
}).then(function (user) {
if (!user)
return response.errorNotFound(res);
- var profile = models.User.parseProfile(user.profile);
+ var profile = models.User.getProfile(user);
res.send({
status: 'ok',
id: req.user.id,