如何在node中使用base64编码?

use*_*498 2 javascript base64 node.js

所以我想在页面上有电子邮件确认和其他内容,但将 userid 作为参数并不是最好的主意,所以我尝试用 base64 对其进行编码,但我很笨,出了问题,即使我没有收到任何错误,我的base64 编码的字符串看起来像这样: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA(这里的证明:1),我收到弃用警告:(node:32320) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.,并且无缘无故我的数据库没有获得新帐户。这里是编码

app.get('/account/email_confirmation', async (req, res) => {
  let temporary_user_id = req.session.temporary_user_id;
  let buffer = new Buffer(temporary_user_id);
  let base64 = buffer.toString('base64');
  console.log(temporary_user_id, base64);
  let email = {
    from: process.env.EMAIL,
    to: req.session.email,
    subject: 'Your .whiteboard account confirmation',
    text: `http://127.0.0.1:8000/confirm/${base64}`
  };
  transporter.sendMail(email, async (err, info) => {
    if(err) throw err;
    console.log(info.response);
    let theme = await get_theme(req)
    res.render('send_email', {theme: theme})
  })
})
Run Code Online (Sandbox Code Playgroud)

这是解码:

app.get('/confirm/:userID', async (req,res) => {
  let userID = req.params.userID;
  let buffer = new Buffer(userID, 'base64');
  let str = buffer.toString('ascii');
  let query = "SELECT verified FROM verified WHERE id = ?;";
  con.query(query, [str], async (err, result) => {
    console.log('aaaaaaaaaaaa')
    if(err) throw err;
    console.log(result[0].verified);
    if(result[0].verified == 0){
      console.log('bbbbbbbbbbbbbbb')
      query = 'UPDATE verified SET verified = 1 WHERE id = ?'
      let theme = await get_theme(req);
      con.query(query, [str], (err) => {
        if(err) throw err;
        res.render('confirm', {theme: theme});
      })
    }else{
      res.redirect('/account/login');
    }
  })
})
Run Code Online (Sandbox Code Playgroud)

Ash*_*oni 5

所以首先你已经使用了new Buffer,它已经被弃用了,所以我建议你使用它。

 const base64data = Buffer.from('someText').toString('base64')
Run Code Online (Sandbox Code Playgroud)

并解码它只需使用

Buffer.from(base64data, 'base64').toString('ascii')
Run Code Online (Sandbox Code Playgroud)

就您的代码而言,它没有错误的base64转换是正确的,您的temporary_user_id可能存在问题,因为您会收到一些尴尬的文本,但转换是正确完成的。

只要这样做就可以解决问题。

JSON.stringify(temporary_user_id)
Run Code Online (Sandbox Code Playgroud)

您告诉错误的方式是因为它需要一个字符串,所以您必须将其转换为字符串。这将解决您的问题。