Ser*_*aia 2 signing keystonejs
我正在创建一个keystone项目,我需要提供允许或不允许用户使用keystone登录访问.但是,我发现keystoneJS使用电子邮件,密码和csrf发送表单数据.当用户访问登录页面时,将向用户提供此csrf.
然而,我需要做的是通过使用API在外部进行通信以登录用户.如何生成_csrf?有另一种方式然后生成两个请求?
谢谢
@Sericaia,你没有包含任何关于你打算如何实现你的登录页面的代码或细节,所以我的答案会有点模糊.
Keystone有一个内部API,用于处理CSRF令牌创建和验证.我不认为它是有记录的,但这里有一个如何运作的要点.
在路由处理程序中,您可以创建一个CSRF令牌键/值对,然后将其注入视图本地,然后在视图模板中使用.你可以像这样手动完成.
app.get('/login', function (req, res) {
var keystone = require('keystone');
var csrfTokenKey = keystone.security.csrf.TOKEN_KEY;
var csrfTokenValue = keystone.security.csrf.getToken(req, res);
res.render('login', {
csrfTokenKey: csrfTokenKey,
csrfTokenValue: csrfTokenValue
});
});
Run Code Online (Sandbox Code Playgroud)
或者您可以使用提供的中间件.
// the middleware will automatically inject the CSRF token
// into res.locals[keystone.security.csrf.LOCAL_KEY]
app.get('/login', keystone.security.csrf.middleware.init, function(req, res) {
...
});
Run Code Online (Sandbox Code Playgroud)
您还可以验证从客户端收到的CSRF令牌.您可以手动执行以下操作:
app.post('/login', function(req, res) {
if (keystone.security.csrf.validate(req)) {
// CSRF is valid
...
} else {
// CSRF is not valid
...
}
});
Run Code Online (Sandbox Code Playgroud)
或者您可以使用提供的中间件.
// the middleware will return 403 status with "CSRF token mismatch"
// of there's a error validating the CSRF token received
app.post('/login', keystone.security.csrf.middleware.validate, function(req, res) {
...
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |