最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何从如何使用Node.js和快递URL价值?

IT培训 admin 2浏览 0评论

如何从如何使用Node.js和快递URL价值?

我想从以下网址http://localhost:3000/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8令牌值。我有一个检查,如果令牌是有效的,用户重置密码屏幕重定向的GET请求。我也有一个POST请求,但是当我安慰req.params.token,它代替输出:tokene3b40d3e3550b35bc916a361d8487aefa30147c8。我想知道如果表单的动作是正确的,但不知道如何得到它的令牌值。

重置密码Get请求

router.get('/reset/:token', (req, res) => {
  console.log(req.params.token) // e3b40d3e3550b35bc916a361d8487aefa30147c8
  User.findOne({
    resetPasswordToken: req.params.token,
    resetPasswordExpires: {
      $gt: Date.now() 
    }
  }, (err, user) => {
    if (!user) {
      req.flash('error_msg', 'The password reset token is invalid or has expired.')
      return res.redirect('/users/forgot')
    }
    res.render('reset')
  })
})

reset.ejs

<% include ./partials/messages %>
<form action="/users/reset/:token" method="POST">
    <div class="form-group">
    <label for="password">Password</label>
    <input type="password" id="password" name="password" class="form-control" placeholder="Please enter a password."
        value="<%= typeof password != 'undefined' ? password : '' %>" />
    </div>
    <button type="submit" class="btn btn-primary btn-block">Register</button>
</form>

重置密码POST请求

router.post('/reset/:token', (req, res) => {
  console.log(req.params.token) // :token
  User.findOne({
    resetPasswordToken: req.params.token,
    resetPasswordExpires: {
      $gt: Date.now() 
    }
  }, (err, user) => {
    if (!user) {
      req.flash('error_msg', 'The password reset token is invalid or has expired.')
      return res.redirect('/users/forgot')
    }

    user.password = req.body.password;
    user.resetPasswordToken = undefined;
    user.resetPasswordExpires = undefined;

    user.save(function (err) {
      req.flash('success_msg', 'Working.')
      return res.redirect('/users/login')
    })
  })
})
回答如下:

在你的HTML表单,你有这样的:

<form action="/users/reset/:token" method="POST">

这将会使当表单张贴是被请求的实际URL:

/users/reset/:token

有没有这样的代码为这里的:token任何替代。这是刚刚直接发送到服务器的URL。

所以,当你再有:

router.post('/reset/:token', (req, res) => {
    console.log(req.url);            // "/user/reset/:token"
    console.log(req.params.token);   // ":token"
});

什么是req.params.token显示你的是无论是在/users/reset后是这样的URL。在你的情况,那就是文字字符串":token"。对于req.params.token实际上有它的道理,你就必须插入实际令牌到URL,这样你的表单标签如下所示:

<form action="/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8" method="POST">

或者,你将获得访问令牌一些其他的方式,例如从Express会话,从一个cookie,从现场的形式,等等。

如何从如何使用Node.js和快递URL价值?

我想从以下网址http://localhost:3000/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8令牌值。我有一个检查,如果令牌是有效的,用户重置密码屏幕重定向的GET请求。我也有一个POST请求,但是当我安慰req.params.token,它代替输出:tokene3b40d3e3550b35bc916a361d8487aefa30147c8。我想知道如果表单的动作是正确的,但不知道如何得到它的令牌值。

重置密码Get请求

router.get('/reset/:token', (req, res) => {
  console.log(req.params.token) // e3b40d3e3550b35bc916a361d8487aefa30147c8
  User.findOne({
    resetPasswordToken: req.params.token,
    resetPasswordExpires: {
      $gt: Date.now() 
    }
  }, (err, user) => {
    if (!user) {
      req.flash('error_msg', 'The password reset token is invalid or has expired.')
      return res.redirect('/users/forgot')
    }
    res.render('reset')
  })
})

reset.ejs

<% include ./partials/messages %>
<form action="/users/reset/:token" method="POST">
    <div class="form-group">
    <label for="password">Password</label>
    <input type="password" id="password" name="password" class="form-control" placeholder="Please enter a password."
        value="<%= typeof password != 'undefined' ? password : '' %>" />
    </div>
    <button type="submit" class="btn btn-primary btn-block">Register</button>
</form>

重置密码POST请求

router.post('/reset/:token', (req, res) => {
  console.log(req.params.token) // :token
  User.findOne({
    resetPasswordToken: req.params.token,
    resetPasswordExpires: {
      $gt: Date.now() 
    }
  }, (err, user) => {
    if (!user) {
      req.flash('error_msg', 'The password reset token is invalid or has expired.')
      return res.redirect('/users/forgot')
    }

    user.password = req.body.password;
    user.resetPasswordToken = undefined;
    user.resetPasswordExpires = undefined;

    user.save(function (err) {
      req.flash('success_msg', 'Working.')
      return res.redirect('/users/login')
    })
  })
})
回答如下:

在你的HTML表单,你有这样的:

<form action="/users/reset/:token" method="POST">

这将会使当表单张贴是被请求的实际URL:

/users/reset/:token

有没有这样的代码为这里的:token任何替代。这是刚刚直接发送到服务器的URL。

所以,当你再有:

router.post('/reset/:token', (req, res) => {
    console.log(req.url);            // "/user/reset/:token"
    console.log(req.params.token);   // ":token"
});

什么是req.params.token显示你的是无论是在/users/reset后是这样的URL。在你的情况,那就是文字字符串":token"。对于req.params.token实际上有它的道理,你就必须插入实际令牌到URL,这样你的表单标签如下所示:

<form action="/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8" method="POST">

或者,你将获得访问令牌一些其他的方式,例如从Express会话,从一个cookie,从现场的形式,等等。

发布评论

评论列表 (0)

  1. 暂无评论