首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeystoneJS信号

KeystoneJS信号
EN

Stack Overflow用户
提问于 2015-03-24 19:00:12
回答 1查看 2.1K关注 0票数 2

我正在创建一个keystone项目,我需要提供允许或不允许用户使用keystone登录进行访问。但是,我发现keystoneJS会发送带有电子邮件、密码和csrf的表单数据。这个csrf是在用户访问登录页面时提供给他的。

尽管如此,我需要做的是通过使用API进行外部组合来登录用户。如何生成_csrf?还有其他方法生成两个请求吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-25 00:26:35

@Sericaia,您没有包括任何代码或细节,您打算如何实现您的登录页面,所以我的回答会有点含糊。

Keystone有一个内部API,用于处理CSRF令牌的创建和验证。我不认为它是有文档记录的,但这是它如何工作的要点。

在路由处理程序中,您可以创建一个CSRF令牌密钥/值对,然后将其注入视图局部变量,然后在视图模板中使用。你可以像这样手工操作。

代码语言:javascript
复制
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
  });
});

或者您可以使用提供的中间件。

代码语言:javascript
复制
// 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令牌。您可以手动完成以下操作:

代码语言:javascript
复制
app.post('/login', function(req, res) {
  if (keystone.security.csrf.validate(req)) {
    // CSRF is valid 
    ...
  } else {
    // CSRF is not valid
    ...
  }

});

或者您可以使用提供的中间件。

代码语言:javascript
复制
// 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) {
    ...
});

希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29240757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档