我正在创建一个keystone项目,我需要提供允许或不允许用户使用keystone登录进行访问。但是,我发现keystoneJS会发送带有电子邮件、密码和csrf的表单数据。这个csrf是在用户访问登录页面时提供给他的。
尽管如此,我需要做的是通过使用API进行外部组合来登录用户。如何生成_csrf?还有其他方法生成两个请求吗?
谢谢
发布于 2015-03-25 00:26:35
@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
});
});或者您可以使用提供的中间件。
// 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) {
...
});还可以验证从客户端接收的CSRF令牌。您可以手动完成以下操作:
app.post('/login', function(req, res) {
if (keystone.security.csrf.validate(req)) {
// CSRF is valid
...
} else {
// CSRF is not valid
...
}
});或者您可以使用提供的中间件。
// 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) {
...
});希望这能有所帮助。
https://stackoverflow.com/questions/29240757
复制相似问题