2016-07-19 11 views
3

現在、パスポートを使ってnode.jsのduoを試しています。これを行うためのパスポートデュオのストラトを使用して、そのGitHubリポジトリはhereにあります。私は与えられた例を使用しようとしましたが、自分自身のアプリケーション内で動作させることはできません。Passport - Duo戦略 "ERR | sign_request()に渡されたユーザ名が無効です"

しかし、私がデュオのための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> 

パスポートデュオを実装した経験があり、wh y sig_requestはそのエラーを投げ戻しています。

答えて

2

あなたが言ったのはdeclaresduo_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つの条件でこのエラーを返して:

  • ユーザ名ではありません定義されている
  • ユーザー名は空です
  • ユーザー名には、文字が含まれています|
  • あなたの req.user.emailはこのエラーを返す1つの上記の条件に合致していることを思わ

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

戻るPassport-Duoに、この機能sign_requestは、次のコードを使用してstrategyによって呼び出されます。このコードで提供されているコードでは、それがどれであるかを確認することは不可能ですが、この変数を必ずチェックして、この条件が真でないことを確認する必要があります。

関連する問題