首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >U2F - TypeError |无法注册密钥

U2F - TypeError |无法注册密钥
EN

Stack Overflow用户
提问于 2019-08-12 22:03:53
回答 1查看 193关注 0票数 0

我最近开始研究Node.js和Javascript中的U2F。我得到了错误:TypeError: Cannot read property 'registerResponse' of undefined

在收到服务器上的错误之前,我得到了以下返回:

代码语言:javascript
复制
{errorCode: 5, errorMessage: "NotAllowedError: The operation either timed out or…://w3c.github.io/webauthn/#sec-assertion-privacy."}

服务器在Mac os的localhost上使用HTTPS和自签名证书。

可能的问题是什么?响应似乎是空的;并且我没有被要求在浏览器中插入usb。

app.js:

代码语言:javascript
复制
const U2F = require("u2f");
const Cors = require("cors");
const session = require("express-session");
const HTTPS = require("https");
const FS = require("fs");
const BodyParser = require("body-parser");
const express = require("express");

var app = express();
var routes = require("./routes")(app);

const APP_ID = "https://localhost:3000";

app.use(BodyParser.json());
app.use(BodyParser.urlencoded({ extended: true }));
app.use(session({ secret: "thepolyglotdeveloper", cookie: { secure: true, maxAge: 60000 }, saveUninitialized: true, resave: true }));
app.use(Cors({ origin: [APP_ID], credentials: true }));

HTTPS.createServer({
    key: FS.readFileSync("server.key"),
    cert: FS.readFileSync("server.crt")
}, app).listen(3000, () => {
    console.log("Listening at :443...");
});

routes.js

代码语言:javascript
复制
const U2F = require("u2f");
const session = require("express-session");

const APP_ID = "https://localhost:3000";

var appRouter = function(app) {

    var user;

    app.get("/", function(req, res, next) {
        res.sendFile(__dirname + '/index.html');
    });

    app.get("/register", function(req, res, next) {
        var session = U2F.request(APP_ID);
        app.set("session", JSON.stringify(session));
        console.log("session: " + JSON.stringify(session));
        res.send(session);
    });

    app.post("/register", function (req, res, next) {
        console.log("res2: " + req.body);

        var registration = U2F.checkRegistration(JSON.parse(app.get("session")), req.body.registerResponse);
        if(!registration.successful) {
            return res.status(500).send({ message: "error" });
        } else {
            console.log("error");
        }
        user = registration;
        res.send(registration);
    });

}

module.exports = appRouter;

index.html

代码语言:javascript
复制
$("#register").click(() => {
                if(window.u2f && window.u2f.register) {
                    $.get("/register", result => {
                        console.log(result);
                        window.u2f.register(result.appId, [result], [], response => {
                            console.log(response);
                            $.post("/register", { registerResponse: response }, result => {
                                console.log(result);
                            });
                            console.log(response);
                        });
                    });
                } else {
                    document.write("<p>U2F is not supported</p>");
                }
            });

该请求似乎已超时,或者不被允许。我试着寻找解决方案,等等;但关于这个问题的信息很少,甚至没有。

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-12 22:38:10

您在使用BodyParser之前使用了var routes = require("./routes")(app);。中间件按照它们被初始化的顺序工作。因此,在您的情况下,body-parser甚至没有在路由中使用。

将路由放在bodyParsercors之后

代码语言:javascript
复制
var app = express();

const APP_ID = "https://localhost:3000";

app.use(BodyParser.json());
app.use(BodyParser.urlencoded({ extended: true }));
app.use(session({ secret: "thepolyglotdeveloper", cookie: { secure: true, maxAge: 60000 }, saveUninitialized: true, resave: true }));
app.use(Cors({ origin: [APP_ID], credentials: true }))
var routes = require("./routes")(app);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57462724

复制
相关文章

相似问题

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