Node.js:在注册/登录Node.js后尝试重定向用户 [英] Node.js: Trying to redirect a user after signing up/login in nodejs

查看:42
本文介绍了Node.js:在注册/登录Node.js后尝试重定向用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在用户登录/注册后将其重定向到节点中的他/她的个人资料页面.登录/注册系统运行良好,并且正在保存数据.但是,当用户在注册或登录后被重定向时,被重定向到的个人资料页面路由无法吸引用户.我要去哪里错了?这是后端的控制器.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆