Anonymous
Невозможно отправить POST /api/auth/register Node.js
Сообщение
Anonymous » 24 июн 2024, 22:28
Я попробовал все, что знал. Мне отчаянно нужна помощь, чтобы заставить это работать и успешно зарегистрировать пользователя и разместить данные в базе данных.
Это мой сервер > файл App.js
Код: Выделить всё
const express = require('express');
const app = express();
const cors = require('cors');
const session = require('express-session');
const passport = require('passport');
var jwt = require('jsonwebtoken');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const path = require('path');
const config = require('./config/auth.config');
const appConfig = require('./config/app.config');
const db = require('./models');
const User = db.user;
require('./models/db');
require('./cronJob');
require('./archiveCronJob');
const authRouter = require('./routes/auth');
const slackRouter = require('./routes/slack');
const ms365Router = require('./routes/ms365');
const googleRouter = require('./routes/google');
const archiveRouter = require('./routes/archive');
const billingRouter = require('./routes/billing');
const adminRouter = require('./routes/admin');
const userRouter = require('./routes/user');
// Configure CORS
app.use(cors({
origin: '*', // Allow requests from any origin
methods: ['GET', 'POST', 'PUT', 'DELETE'], // Allow these methods
allowedHeaders: ['Content-Type', 'Authorization'], // Allow these headers
}));
// Configure session middleware
app.use(session({
secret: config.secret,
resave: true,
saveUninitialized: true,
cookie: { secure: true } // Adjust options as needed
}));
// Configure body parsers
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.options('/api/auth/register', cors());
// Configure passport
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
passport.use(new GoogleStrategy({
clientID: config.G_CLIENT_ID,
clientSecret: config.G_CLIENT_SECRET,
callbackURL: `${appConfig.SITE_URL}/auth/google/callback`,
}, (accessToken, refreshToken, profile, done) => {
done(null, profile);
}));
// Define routes
app.use('/api/auth', authRouter);
app.use('/api', slackRouter);
app.use('/api', ms365Router);
app.use('/api', googleRouter);
app.use('/api', archiveRouter);
app.use('/api', billingRouter);
app.use('/api', adminRouter);
app.use('/api', userRouter);
// Download route
app.get('/download/:baseId/:itemId/:filename', (req, res) => {
const baseId = req.params.baseId;
const itemId = req.params.itemId;
const filename = req.params.filename;
const directoryPath = path.join(__dirname, 'download', baseId, itemId);
const filePath = path.join(directoryPath, filename);
res.download(filePath, filename, (err) => {
if (err) {
console.log(err);
res.status(500).send('Error downloading the file.');
}
});
});
// Google OAuth callback route
app.get('/auth/google', passport.authenticate('google', {
scope: ['email']
}));
app.get('/auth/google/callback', passport.authenticate('google'), async (req, res) => {
console.log("Google User: ", req.user);
const email = req.user.emails[0].value;
console.log("Email: ", email);
const existUser = await User.findOne({ email });
if (existUser) {
const token = jwt.sign({ id: existUser._id }, config.secret, {
expiresIn: 86400 // 24 hours
});
res.redirect(`/login?serviceToken=${token}`);
return;
}
const user = new User({
email,
isGoogleAuth: true,
});
try {
await user.save();
console.log("Created User from gmail: ", user);
const token = jwt.sign({ id: user._id }, config.secret, {
expiresIn: 86400 // 24 hours
});
res.redirect(`/login?serviceToken=${token}`);
} catch (error) {
console.error("Error saving user:", error);
res.redirect('/login');
return;
}
});
// SPA fallback route and error handling
app.use((req, res, next) => {
if (/(.ico|.js|.css|.jpg|.png|.map|.svg|.ttf)$/i.test(req.path)) {
next();
} else {
res.header('Expires', '-1');
res.sendFile(path.join(__dirname, '../build', 'index.html'));
}
});
// Serve static files
app.use(express.static(path.join(__dirname, '../build')));
app.use(express.static(path.join(__dirname, '../public')));
app.use('/download', express.static('download'));
// Global error handler
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something went wrong!');
});
// Start the server
const PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
Это мой Сервер > Контроллер > файл auth.js
Код: Выделить всё
const config = require('../config/auth.config');
const appConfig = require('../config/app.config');
const db = require('../models');
const Utils = require('./utils');
const User = db.user;
const admin = require('./admin');
var parser = require('ua-parser-js');
var jwt = require('jsonwebtoken');
var bcrypt = require('bcryptjs');
const crypto = require('crypto');
exports.signup = async (req, res) => {
const existUser = await User.findOne({ email: req.body.email });
if (existUser) {
admin.logActions(req, { email: req.body.email, actionType: 'SignUp', actionDetails: 'Already exists', actionResult: 'Failed' });
res.send({ data: existUser, message: 'Already exists!' });
return;
}
const mailVerificationToken = crypto.randomBytes(32).toString('hex');
const mailVerificationTokenExpires = new Date();
mailVerificationTokenExpires.setDate(mailVerificationTokenExpires.getDate() + 7); // Token expires in 7 days
const currentDate = new Date();
const trialEndDate = new Date();
trialEndDate.setDate(currentDate.getDate() + 30);
const user = new User({
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8),
trialEndDate: Utils.get30DayFreeTrialEndDate(),
roles: ['customer'],
isMailVerified: false,
mailVerificationToken,
mailVerificationTokenExpires
});
try {
await user.save();
const verificationLink = `${req.protocol}://${req.get('host')}/api/auth/verify-email?token=${mailVerificationToken}`;
await Utils.sendMailVerification(req.body.email, verificationLink);
admin.logActions(req, {
email: req.body.email,
actionType: 'SignUp',
actionDetails: 'Sent email verification link successfully.',
actionResult: 'Success'
});
res.send({ data: user, message: "We've sent the email verification link. Please check your email quickly!" });
} catch (error) {
admin.logActions(req, {
email: req.body.email,
actionType: 'SignUp',
actionDetails: JSON.stringify(error, null, 2),
actionResult: 'Failed'
});
res.status(500).send({ message: error });
}
};
Сервер/маршруты/user.js:(
https://i.sstatic.net/zO8r1lj5.png )
Сервер/модели/индекс .js:(
https://i.sstatic.net/gY4dS1aI.png )
Сервер/маршруты/auth.js:(
https://i.sstatic.net/i7nR47j8 . png)
Подробнее здесь:
https://stackoverflow.com/questions/786 ... er-node-js
1719257318
Anonymous
Я попробовал все, что знал. Мне отчаянно нужна помощь, чтобы заставить это работать и успешно зарегистрировать пользователя и разместить данные в базе данных. Это мой сервер > файл App.js [code]const express = require('express'); const app = express(); const cors = require('cors'); const session = require('express-session'); const passport = require('passport'); var jwt = require('jsonwebtoken'); const GoogleStrategy = require('passport-google-oauth20').Strategy; const path = require('path'); const config = require('./config/auth.config'); const appConfig = require('./config/app.config'); const db = require('./models'); const User = db.user; require('./models/db'); require('./cronJob'); require('./archiveCronJob'); const authRouter = require('./routes/auth'); const slackRouter = require('./routes/slack'); const ms365Router = require('./routes/ms365'); const googleRouter = require('./routes/google'); const archiveRouter = require('./routes/archive'); const billingRouter = require('./routes/billing'); const adminRouter = require('./routes/admin'); const userRouter = require('./routes/user'); // Configure CORS app.use(cors({ origin: '*', // Allow requests from any origin methods: ['GET', 'POST', 'PUT', 'DELETE'], // Allow these methods allowedHeaders: ['Content-Type', 'Authorization'], // Allow these headers })); // Configure session middleware app.use(session({ secret: config.secret, resave: true, saveUninitialized: true, cookie: { secure: true } // Adjust options as needed })); // Configure body parsers app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.options('/api/auth/register', cors()); // Configure passport app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser((user, done) => { done(null, user); }); passport.deserializeUser((user, done) => { done(null, user); }); passport.use(new GoogleStrategy({ clientID: config.G_CLIENT_ID, clientSecret: config.G_CLIENT_SECRET, callbackURL: `${appConfig.SITE_URL}/auth/google/callback`, }, (accessToken, refreshToken, profile, done) => { done(null, profile); })); // Define routes app.use('/api/auth', authRouter); app.use('/api', slackRouter); app.use('/api', ms365Router); app.use('/api', googleRouter); app.use('/api', archiveRouter); app.use('/api', billingRouter); app.use('/api', adminRouter); app.use('/api', userRouter); // Download route app.get('/download/:baseId/:itemId/:filename', (req, res) => { const baseId = req.params.baseId; const itemId = req.params.itemId; const filename = req.params.filename; const directoryPath = path.join(__dirname, 'download', baseId, itemId); const filePath = path.join(directoryPath, filename); res.download(filePath, filename, (err) => { if (err) { console.log(err); res.status(500).send('Error downloading the file.'); } }); }); // Google OAuth callback route app.get('/auth/google', passport.authenticate('google', { scope: ['email'] })); app.get('/auth/google/callback', passport.authenticate('google'), async (req, res) => { console.log("Google User: ", req.user); const email = req.user.emails[0].value; console.log("Email: ", email); const existUser = await User.findOne({ email }); if (existUser) { const token = jwt.sign({ id: existUser._id }, config.secret, { expiresIn: 86400 // 24 hours }); res.redirect(`/login?serviceToken=${token}`); return; } const user = new User({ email, isGoogleAuth: true, }); try { await user.save(); console.log("Created User from gmail: ", user); const token = jwt.sign({ id: user._id }, config.secret, { expiresIn: 86400 // 24 hours }); res.redirect(`/login?serviceToken=${token}`); } catch (error) { console.error("Error saving user:", error); res.redirect('/login'); return; } }); // SPA fallback route and error handling app.use((req, res, next) => { if (/(.ico|.js|.css|.jpg|.png|.map|.svg|.ttf)$/i.test(req.path)) { next(); } else { res.header('Expires', '-1'); res.sendFile(path.join(__dirname, '../build', 'index.html')); } }); // Serve static files app.use(express.static(path.join(__dirname, '../build'))); app.use(express.static(path.join(__dirname, '../public'))); app.use('/download', express.static('download')); // Global error handler app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Something went wrong!'); }); // Start the server const PORT = process.env.PORT || 8000; app.listen(PORT, () => { console.log(`App listening on port ${PORT}`); console.log('Press Ctrl+C to quit.'); }); [/code] Это мой Сервер > Контроллер > файл auth.js [code]const config = require('../config/auth.config'); const appConfig = require('../config/app.config'); const db = require('../models'); const Utils = require('./utils'); const User = db.user; const admin = require('./admin'); var parser = require('ua-parser-js'); var jwt = require('jsonwebtoken'); var bcrypt = require('bcryptjs'); const crypto = require('crypto'); exports.signup = async (req, res) => { const existUser = await User.findOne({ email: req.body.email }); if (existUser) { admin.logActions(req, { email: req.body.email, actionType: 'SignUp', actionDetails: 'Already exists', actionResult: 'Failed' }); res.send({ data: existUser, message: 'Already exists!' }); return; } const mailVerificationToken = crypto.randomBytes(32).toString('hex'); const mailVerificationTokenExpires = new Date(); mailVerificationTokenExpires.setDate(mailVerificationTokenExpires.getDate() + 7); // Token expires in 7 days const currentDate = new Date(); const trialEndDate = new Date(); trialEndDate.setDate(currentDate.getDate() + 30); const user = new User({ email: req.body.email, password: bcrypt.hashSync(req.body.password, 8), trialEndDate: Utils.get30DayFreeTrialEndDate(), roles: ['customer'], isMailVerified: false, mailVerificationToken, mailVerificationTokenExpires }); try { await user.save(); const verificationLink = `${req.protocol}://${req.get('host')}/api/auth/verify-email?token=${mailVerificationToken}`; await Utils.sendMailVerification(req.body.email, verificationLink); admin.logActions(req, { email: req.body.email, actionType: 'SignUp', actionDetails: 'Sent email verification link successfully.', actionResult: 'Success' }); res.send({ data: user, message: "We've sent the email verification link. Please check your email quickly!" }); } catch (error) { admin.logActions(req, { email: req.body.email, actionType: 'SignUp', actionDetails: JSON.stringify(error, null, 2), actionResult: 'Failed' }); res.status(500).send({ message: error }); } }; [/code] Сервер/маршруты/user.js:(https://i.sstatic.net/zO8r1lj5.png) Сервер/модели/индекс .js:(https://i.sstatic.net/gY4dS1aI.png) Сервер/маршруты/auth.js:(https://i.sstatic.net/i7nR47j8. png) Подробнее здесь: [url]https://stackoverflow.com/questions/78664297/cannot-post-api-auth-register-node-js[/url]