2012-04-09 5 views
4

Успешно получил промежуточное программное обеспечение csrf, работающее в курьере в соответствии с предыдущими вопросами SO. Он генерирует маркеры, но он отрицает ВСЕ представления формы.CSRF Middleware, вызывающий проблемы Node.JS + Express

Единственный возможный конфликт, который я вижу, заключается в том, что я использую redis в качестве хранилища сеансов с подключением-redis и подключением socket.io к сеансу, но я прокомментировал биты сокета, и он все еще не играет хорошо.

Это заказ, который я называю своим промежуточным программным обеспечением, возможно, здесь причудливым?

(CoffeeScript)

app.configure -> 
    app.set 'views', __dirname + '/views' 
    app.set 'view engine', 'jade' 
    app.use express.bodyParser() 
    app.use express.methodOverride() 
    app.use express.cookieParser() 
    app.use express.session 
     secret: "itsasecret" 
     store: sessionStore 
    app.use express.csrf() 
    app.dynamicHelpers 
     token: (req, res) -> 
     req.session._csrf 
    app.use app.router 
    app.use express.static(__dirname + '/public') 

Это маршрут, который отвечает на посланных данных.

(Это не код развития, только у меня обучение узел Я хорошо знаю, что это будет чудовищно, если я ставлю его в Интернете)

app.post '/admin/logintry', (req, res) -> 
    if req.body.username is 'Tim' and req.body.password is 'TempPassword' 
     req.session.adminIn = true 
     res.redirect '/admin/home' 
    else 
     res.redirect '/admin/login?failed=true' 

Вот HTML, который достигает браузера на странице формы :

<input type="hidden" token="5ODFxml1QAhQvOmq1QE6Qd7n"> 

И ответ, полученный от "/ админ/logintry":

Forbidden 

N ew to Node, Express и SO, только недавно правильно изучил javascript, не зная, где даже начать искать проблемы. Любая помощь, даже на том, с чего начать копать, очень ценится.

Cheers.

ответ

4

Если вы посмотрите на Connect - csrf documentation, то input тег для маркеров должны выглядеть следующим образом:

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

Так с вашим примером лексемой:

<input type="hidden" name="_csrf" value="5ODFxml1QAhQvOmq1QE6Qd7n" /> 

В настоящее время Connect (Экспресс использует соединение под hood) пытается найти поле с именем «_csrf», но не может его найти, потому что оно не существует в вашей форме. Поэтому он запрещает доступ.

+0

Все работает сейчас. Вызвал имя при фиксации по предыдущему вопросу. Спасибо за быстрый ответ! –

 Смежные вопросы

  • Нет связанных вопросов^_^