无法发布/确认/ 26169e36df56653301407316a89589e1
我的app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var config = require('./config/database');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/ajax');
var db = mongoose.connection;
var MongoStore = require('connect-mongo');
const expressValidator = require('express-validator');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.urlencoded());
app.use(express.json());
app.use(expressValidator());
app.use('/', require('./routes/activationRoutes'));
module.exports = app;
我的activationRoutes.js
var express = require('express');
var router = express.Router();
var crypto = require('crypto');
var nodemailer = require('nodemailer');
const bluebird = require('bluebird');
var User = require('../models/User');
var Token = require('../models/Token');
router.post('/login', function(req, res, next) {
req.assert('email', 'Email is not valid').isEmail();
req.assert('email', 'Email cannot be blank').notEmpty();
req.assert('password', 'Password cannot be blank').notEmpty();
req.sanitize('email').normalizeEmail({ remove_dots: false });
// Check for validation erro
var errors = req.validationErrors();
if (errors) return res.status(400).send(errors);
User.findOne({ email: req.body.email }, function(err, user) {
if (!user) return res.status(401).send({ msg: 'The email address ' + req.body.email + ' is not associated with any account. Double-check your email address and try again.'});
user.comparePassword(req.body.password, function (err, isMatch) {
if (!isMatch) return res.status(401).send({ msg: 'Invalid email or password' });
// Make sure the user has been verified
if (!user.isVerified) return res.status(401).send({ type: 'not-verified', msg: 'Your account has not been verified.' });
// Login successful, write token, and send back user
res.send({ token: generateToken(user), user: user.toJSON() });
});
});
});
router.post('/signup', function(req, res, next) {
req.assert('name', 'Name cannot be blank').notEmpty();
req.assert('email', 'Email is not valid').isEmail();
req.assert('email', 'Email cannot be blank').notEmpty();
req.assert('password', 'Password must be at least 4 characters long').len(4);
req.sanitize('email').normalizeEmail({ remove_dots: false });
// Check for validation errors
var errors = req.validationErrors();
if (errors) { return res.status(400).send(errors); }
// Make sure this account doesn't already exist
User.findOne({ email: req.body.email }, function (err, user) {
// Make sure user doesn't already exist
if (user) return res.status(400).send({ msg: 'The email address you have entered is already associated with another account.' });
// Create and save the user
user = new User({ name: req.body.name, email: req.body.email, password: req.body.password });
user.save(function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
// Create a verification token for this user
var token = new Token({ _userId: user._id, token: crypto.randomBytes(16).toString('hex') });
// Save the verification token
token.save(function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
// Send the email
var sender = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'votreMAIL@gmail.com',
pass: 'votrePASSWORD'
}
});
var mailOptions = {
from: 'votreMAIL@gmail.com',
to: user.email,
subject: 'Account Verification Token',
text: 'Hello,\n\n' + 'Please verify your account by clicking the link: \nhttp:\/\/' + req.headers.host + '\/confirmation\/' + token.token + '.\n'
};
sender.sendMail(mailOptions, function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
res.status(200).send('A verification email has been sent to ' + user.email + '.');
});
});
});
});
});
router.post('/confirmation', function(req, res, next) {
req.assert('email', 'Email is not valid').isEmail();
req.assert('email', 'Email cannot be blank').notEmpty();
req.assert('token', 'Token cannot be blank').notEmpty();
req.sanitize('email').normalizeEmail({ remove_dots: false });
// Check for validation errors
var errors = req.validationErrors();
if (errors) return res.status(400).send(errors);
// Find a matching token
Token.findOne({ token: req.body.token }, function (err, token) {
console.log(req.body.token);
if (!token) return res.status(400).send({ type: 'not-verified', msg: 'We were unable to find a valid token. Your token my have expired.' });
// If we found a token, find a matching user
User.findOne({ _id: token._userId }, function (err, user) {
if (!user) return res.status(400).send({ msg: 'We were unable to find a user for this token.' });
if (user.isVerified) return res.status(400).send({ type: 'already-verified', msg: 'This user has already been verified.' });
// Verify and save the user
user.isVerified = true;
user.save(function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
res.status(200).send("The account has been verified. Please log in.");
});
});
});
});
module.exports = router;