2

私は同様の問題を見てきましたが、どの解決策も私にはうまくいきませんでした。テンプレート用にejsを使用してexpress3を使用しています。トークンは次のようにhtmlに入力されています。

<input type="hidden" name="_csrf" value="IS+SwCqr3j+vGW9QSqIk56ZC/">

これは私のテンプレートhtmlが入力フィールドのためにどのように見えるかです:

<input type="hidden" name="_csrf" value=<%= token %>/>

しかし、フォームを送信すると、

Error: Forbidden at Object.exports.error 

これが私のメインアプリ設定機能の様子です

app.configure(function () {
    app.engine('.html', require('ejs').__express);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.static(__dirname + '/public'));
    app.use(express.session({
        store:  new mongoStore({
            url:'mongodb://localhost/test',
            maxAge: 300000
        }),
        secret: '076ee61d63ba104r4e34872411e433b2',
        cookie: {
            path     : '/',
            httpOnly : true,
            maxAge   : 1000*60*60*24*30*12
        }
    }));
    app.use(express.csrf());
    app.use(function(req, res, next){
        res.locals.token = req.session._csrf;
        next();
    });
    app.use(app.router);
});

セッションは正常に機能しており、トークンが入力されているため、今何をすべきか悩んでいます。

4

1 に答える 1

10

誰かがこれに出くわした場合、私はトークンの周りに引用符を追加するのを忘れました

<input type="hidden" name="_csrf" value="<%= token %>"/>
于 2012-08-30T07:27:40.850 に答える