Node.js:在注册/登录Node.js后尝试重定向用户 [英] Node.js: Trying to redirect a user after signing up/login in nodejs
问题描述
我正在尝试在用户登录/注册后将其重定向到节点中的他/她的个人资料页面.登录/注册系统运行良好,并且正在保存数据.但是,当用户在注册或登录后被重定向时,被重定向到的个人资料页面路由无法吸引用户.我要去哪里错了?这是后端的控制器.
I'm trying to redirect a user to his/her profile page in node after he logs in/signs up. The login/signup system is working perfectly and data is getting saved. But when the user is being redirected after signing-up or logging in, the profile page route he's being redirected to is not getting the user. Where am i going wrong? here is the controller on backend.
var _ = require('lodash');
var {
User
} = require('../models/user');
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var validation = require('./../middlewares/validate')
var token;
var jwt = require('jsonwebtoken');
var secret = "98ix0b84gs3r@&$#*np9bgkpfjeib1f9ipe";
var decodedToken, response, err;
router.get("/users", function(req, res) {
res.render('signup.hbs', {
title: "New User Signup"
});
});
router.get("/login", function(req, res) {
res.render('login.hbs', {
title: "New User Login"
});
});
var authentication = (req, res, next) => {
token = req.body.token || req.query.token || req.headers['x-access-token'];
if (token) {
jwt.verify(token, secret, function(err, decoded) {
if (err) {
return res.json({
success: false,
message: 'Token authentication failed'
});
} else {
decodedToken = decoded;
console.log("Token decoded", decodedToken);
next();
}
})
}
}
router.post('/submitLogin', validation.login, function(req, res) {
User.findOne({
email: req.body.email
}, function(err, user) {
if (err) {
err = ("Something is wrong. Error= " + err);
res.json(err);
} else if (user === null || user === undefined || user.email === null || user.email === undefined) {
err = ("Enter correct email");
res.json(err);
} else if (!user.compareHash(req.body.password)) {
err = ("Enter correct password");
res.json(err);
} else {
token = jwt.sign({
exp: Math.floor(Date.now() / 1000) + (60 * 60 * 60),
id: user._id,
email: user.email,
username: user.username
}, secret);
response = {
status: "Logged In",
username: user.username,
email: user.email
};
response.token = token; //token pushed to response
//res.json(response);
res.redirect('http://localhost:8000/profile/me');
}
});
});
router.post('/signup', validation.signup, function(req, res) {
User.findOne({
email: req.body.email
}, function(error, user) {
if (error) {
err = {
error: error
};
res.json(err);
} else if (user) {
err = {
error: "Email exists"
};
res.json(err);
} else {
var newUser = new User({
email: req.body.email,
username: req.body.username,
user_type: "basic",
active: true
});
newUser.password = newUser.generateHash(req.body.password);
newUser.save((error) => {
if (error) {
response = ("Something was wrong" + error);
res.json(response);
} else {
token = jwt.sign({
exp: Math.floor(Date.now() / 1000) + (60 * 60),
id: newUser._id,
email: newUser.email,
username: newUser.username
}, secret);
response = {
status: "Signed up",
id: newUser.id,
username: newUser.username,
email: newUser.email
};
response.token = token; //token pushed to response
//res.json(response);
res.redirect('http://localhost:8000/profile/me/' + response.id);
}
});
}
});
});
router.get("/me/id", function(req, res) {
User.findById({
_id: req.params.id
}, function(err, user) {
console.log(user);
if (err) {
res.send("Please login first");
} else {
res.render('profile.hbs', {
title: "New User Profile",
username: user.username,
email: user.email
});
}
})
});
module.exports = router;
推荐答案
您正在错误地将路由信息提供给/me/id
路由.
You are giving routing information to your /me/id
route incorrectly.
要提供动态路由参数,您需要在该变量之前添加:
.替换您的路线
To give dynamic route parameter you need to add :
before that variable. Replace your route
router.get("/me/id",...
到
router.get("/me/:id",...
您可以在此处了解更多信息.
you can read more about express routing here.
,除此之外,您也没有在登录方法重定向中传递ID.我不知道您是否为此设置了另一条路线,如果没有,您还需要添加它.
and other than that you are also not passing id in login method redirect. I don't know if you have another route setup for that, if not that you also need to add that.
这篇关于Node.js:在注册/登录Node.js后尝试重定向用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!