javascript - Passport - 双人战略 "ERR|The username passed to sign_request() is invalid"

标签 javascript node.js authentication passport.js

我目前正在使用 passport 在 node.js 中与 duo 一起玩,看看我是否可以将它实现到测试应用程序中....我正在使用 passport-duo strat 来执行此操作,并且位于 GitHub 存储库中here我曾尝试使用给出的示例,但无法在我自己的应用程序中使用它。

但似乎每次我为 duo 加载 iframe 时,它​​总是向我抛出相同的错误 ERR|The username passed to sign_request() is invalid.

它不断掉落的片段如下:

app.get('/login-duo', checkLoggedIn, function (req, res, next) {
    console.log(req.user);
    console.log(req.user['id']);
    console.log(req.query.host);
    console.log(req.query.post_action);
    console.log(req.query.signed_request);
    var username= req.user['id'];
    res.render('login-duo', {
        user : req.user['id'],
        host : req.query.host,
        post_action : req.query.post_action,
        sig_request : req.query.signed_request
    });
});

HTML

<!DOCTYPE html>
<html>
</script>
<style>
  body {
    background: #f1f1f1;
  }
  .iframe_div {
    width: 90%;
    max-width: 620px;
    margin: 0 auto;
  }
  #duo_iframe {
    height: 500px;
    width: 100%;
  }
  div {
    background: transparent;
  }
</style>
<form method="POST" style="display:none;" id="duo_form">
</form>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <head>
    <title>Passport-Duo Example</title>
  </head>
  <body>
   <div class="iframe_div">
    <iframe id="duo_iframe" frameborder="0" allowtransparency="true"></iframe>
</div>
  </body>
  <script src="js/Duo-Web-v1.bundled.min.js"></script>
<script>
Duo.init({
  'host': '<%= host %>',
  'post_action': '<%= post_action %>',
  'sig_request': '<%= sig_request %>'
});
</script>
</html>

想知道任何有实现 passport-duo 经验的人,并且知道为什么 sig_request 会返回该错误。

最佳答案

Passport-Duo package你提到了declares duo_web 作为依赖。

duo_nodejs (duo_web)是返回此错误的包。错误在 duo.js file 中声明.

如果我们看一下the source code在使用此错误的地方,唯一出现的情况是:

exports.sign_request = function (ikey, skey, akey, username) {
  if (!username || username.length < 1) {
    return ERR_USER;
  }
  if (username.indexOf('|') !== -1) {
    return ERR_USER;
  }

  // ...
  // Truncated for the example...
  // ...
}

代码仅在 3 种情况下返回此错误:

  • 用户名未定义
  • 用户名为空
  • 用户名包含字符|

返回Passport-Duo ,此函数 sign_requeststrategy 调用使用以下代码:

var signed = duo.sign_request(this._ikey, this._skey, this._akey, req.user.email);

看来您的 req.user.email 与先前返回此错误的条件相匹配。使用问题中提供的代码,无法检查它是哪一个,但您绝对应该检查此变量并确保这些条件都不成立。

关于javascript - Passport - 双人战略 "ERR|The username passed to sign_request() is invalid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38462302/

相关文章:

javascript - 单击时播放音频

javascript - 如何在回调函数中更新和传递变量

javascript - 动态生成多个 d3 svg 图

java - 如何通过 HTTP 请求获取用户 X.509 证书 -(无需 SSL)

javascript - Ionic2 - 根据 Controller 的显示方式显示/隐藏按钮

node.js - 将来自 lambda 的消息属性添加回 SQS DLQ

node.js - I/O 绑定(bind)和 CPU 绑定(bind)

php - 扩展长期访问 token

c# - 将 Auth0 与 Umbraco 7 集成以进行成员身份验证

javascript - 将 async.eachLimit 转换为 Promise