Skip to content

Commit 0abf616

Browse files
author
khanh2906
committed
fix error response error csrf invalid
1 parent 0969fbe commit 0abf616

File tree

6 files changed

+15
-10
lines changed

6 files changed

+15
-10
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ app.use(csrf.generate({
154154

155155
- Default errorResponse is
156156
```javascript
157-
errorResponse: (req, res) => {
157+
errorResponse: (req, res, next) => {
158158
res.status(403).send('CSRF token invalid');
159159
}
160160
```
@@ -163,7 +163,7 @@ errorResponse: (req, res) => {
163163

164164
```javascript
165165
// when you custom
166-
const newErrorResponse = (req, res) => {
166+
const newErrorResponse = (req, res, next) => {
167167
res.status(403).render('<h1>CSRF token invalid</h1>');
168168
}
169169
app.use(csrf.generate({

lib/cjs/index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ let csrf = {
8484
getTransmitToken: (req) => {
8585
return req.body._csrf || req.headers['csrf-token'];
8686
},
87-
errorResponse: (req, res) => {
87+
errorResponse: (req, res, next) => {
8888
res.status(403).send('CSRF token invalid');
8989
}
9090
}
@@ -123,6 +123,7 @@ module.exports = {
123123
res.cookie(csrf.param, token, csrf.storage.options);
124124
break;
125125
}
126+
req.currentCsrfToken = token
126127
}
127128
next();
128129
} catch (error) {
@@ -139,7 +140,7 @@ module.exports = {
139140
* @param {function} next
140141
*/
141142
setTokenLocalsParam: (req, res, next) => {
142-
res.locals[csrf.value] = csrf.getToken(req)
143+
res.locals[csrf.value] = csrf.getToken(req) || req.currentCsrfToken
143144
next();
144145
},
145146
/**
@@ -155,7 +156,7 @@ module.exports = {
155156
const token = csrf.getTransmitToken(req);
156157

157158
if (!token || token !== csrf.getToken(req)) {
158-
return csrf.errorResponse(req, res)
159+
return csrf.errorResponse(req, res, next)
159160
} else {
160161
console.info("DELETE CSRF TOKEN: ", token)
161162
csrf.clearToken(req, res)

lib/esm/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ let csrf = {
8484
getTransmitToken: (req) => {
8585
return req.body._csrf || req.headers['csrf-token'];
8686
},
87-
errorResponse: (req, res) => {
87+
errorResponse: (req, res, next) => {
8888
res.status(403).send('CSRF token invalid');
8989
}
9090
}
@@ -121,6 +121,7 @@ const generate = (csrfConfig = {
121121
res.cookie(csrf.param, token, csrf.storage.options);
122122
break;
123123
}
124+
req.currentCsrfToken = token
124125
}
125126
next();
126127
} catch (error) {
@@ -138,7 +139,7 @@ const generate = (csrfConfig = {
138139
* @param {function} next
139140
*/
140141
const setTokenLocalsParam = (req, res, next) => {
141-
res.locals[csrf.value] = csrf.getToken(req)
142+
res.locals[csrf.value] = csrf.getToken(req) || req.currentCsrfToken
142143
next();
143144
}
144145

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@knfs-tech/csrf",
3-
"version": "1.0.2",
3+
"version": "1.0.3",
44
"description": "Cross-site request forgery module",
55
"main": "./lib/cjs/index.js",
66
"module": "./lib/esm/index.js",

tests/e2e/csrf.spec.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ app.post("/test-endpoint", csrfMiddleware.protect, (req, res) => {
3737
res.status(200).send("CSRF token valid");
3838
});
3939

40-
app.get("/", (req, res) => {
40+
app.get("/redirect", (req, res) => {
41+
res.redirect('/');
42+
});
43+
44+
app.get("/", (req, res) => {
4145
res.status(200).send("OK");
4246
});
4347

tests/units/csrf.spec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ describe('CSRF Middleware', () => {
5050
req.session._csrf = 'testToken';
5151

5252
csrfMiddleware.setTokenLocalsParam(req, res, next);
53-
5453
expect(res.locals.csrfToken).toEqual('testToken');
5554
expect(next).toHaveBeenCalled();
5655
});

0 commit comments

Comments
 (0)