首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用totp重定向(免提)

用totp重定向(免提)
EN

Stack Overflow用户
提问于 2020-07-11 10:07:34
回答 1查看 187关注 0票数 0

我用SpeakEasy做了一个TOTP (唯一的基于时间的密码),一切都很好,我在代码的末尾设置了一个条件来验证一个令牌,然后将它重定向到一个隐藏的页面,但是它不起作用,我不知道为什么。谢谢你的帮助

视图/valdate.ej

代码语言:javascript
复制
<form method='post' action='/hidden'>
    <input type="text" name="TokenClient" placeholder="your password">
    <button type="submit">submit</button>
</form>

<p><strong>remain :</strong><%= remaining %></p>

<p>
    <strong>token client :</strong><%= user %></br>
</p>

<strong>validation :</strong><%= valid %></br> 

视图/hidden.ejs

<h1>Hidden Page</h1>

apps.js

代码语言:javascript
复制
const Express = require("express");
const BodyParser = require("body-parser");
const Speakeasy = require("speakeasy");
const app = Express();

app.use(BodyParser.json());
app.use(BodyParser.urlencoded({ extended: true }));

// EJS /////////////////////////
app.set("views", "./views");
app.set("view engine", "ejs");

// Menu = OK ///////////////////
app.get("/", (req, res) => {
  res.render("index", {});
});

// Secret Key = OK /////////////
app.get("/totp-secret", (req, res) => {
  //let secret = Speakeasy.generateSecret({ length: 20 }).base32;
  let secret = "azerty";
  res.render("secret", { secret });
});

// TOKEN = OK //////////////////
app.get("/totp-generate-token", (req, res) => {
  let token = Speakeasy.totp({
    secret: req.body.secret,
    encoding: "base32",
  });
  let remaining = 30 - Math.floor((new Date().getTime() / 1000.0) % 30);

  res.render("token", { token, remaining });
});

//Validation/////////////////////
app.get("/totp-validate", (req, res) => {
  let remaining = 30 - Math.floor((new Date().getTime() / 1000.0) % 30);
  ///////////////////////////////
  let user = req.body.TokenClient;
  ///////////////////////////////
  let valid = Speakeasy.totp.verify({
    secret: req.body.secret,
    encoding: "base32",
    token: req.body.TokenClient, // Token Client
    window: 0,
  });

  res.render("validate", { remaining, user, valid });
});

app.post("/totp-validate", (req, res) => {
  let remaining = 30 - Math.floor((new Date().getTime() / 1000.0) % 30);

  let user = req.body.TokenClient;

  let valid = Speakeasy.totp.verify({
    secret: req.body.secret,
    encoding: "base32",
    token: req.body.TokenClient, // Token Client
    window: 0,
  });

  // Probleme here !!! ////////////////////////////
  if (valid) {
    res.redirect("/hidden");
    console.log("valide");
  } else {
    res.redirect("/totp-validate");
  }

  res.render("validate", { remaining, user, valid });
});

app.listen(3000, () => {
  console.log("Listening at :3000...");
});

变量“有效”是一个布尔值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 17:33:55

我不太清楚你的问题,但我知道问题出在哪里。您的表单重定向到带有POST请求和express的/hidden页面,不知道如何处理它。

当用户完成表单时,这个函数应该处理响应:

代码语言:javascript
复制
app.post('hidden', (req, res) => { /* Your code here */ });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62847760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档