简体   繁体   English

Node.js:在nodejs中注册/登录后尝试重定向用户

[英]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; 

You are giving routing information to your /me/id route incorrectly. 您将错误的路由信息​​提供给/me/id路由。

To give dynamic route parameter you need to add : before that variable. 要提供动态路由参数,您需要在该变量之前添加: Replace your route 更换路线

router.get("/me/id", ...

to

router.get("/me/:id", ...

you can read more about express routing here . 您可以在此处阅读有关快速路由的更多信息。

and other than that you are also not passing id in login method redirect. 除此之外,您也没有在登录方法重定向中传递ID。 I don't know if you have another route setup for that, if not that you also need to add that. 我不知道您是否为此设置了另一个路由,如果没有,则还需要添加它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM