KeystoneJS通过Rest请求注册

时间:2016-03-03 21:15:21

标签: keystonejs

使用sydjs作为书籍以使一切正常运作

我尝试通过api:

通过POST请求注册用户

/ API /应用程序/注册的电子邮件

每当我发送只有电子邮件和传递的数据时 - 一切正常。如果我尝试添加名称参数 - 它总是失败。 在前端注册工作应该

将数据发送为:

let parameters = [
            "email": "\(email)",
            "password": "\(password)",
            "name": [
                "first": "\(firstname)",
                "last": "\(lastname)"
            ]   
        ]

也许任何人都知道为什么它不能与名字一起使用? THX。

2 个答案:

答案 0 :(得分:0)

它不起作用,因为Keystone中的登录请求需要_CSRF令牌验证,您需要将其作为参数提供。

一个示例是首先向您的登录页面发出GET请求(CSRF令牌将在HEADER响应中),保存它,然后让您的登录请求传递在前一个请求中获得的CSRF令牌。

这将有所帮助KeystoneJS signin

答案 1 :(得分:0)

我实现了针对keystone(v4.0.0-beta.5)的REST-API的登录。在客户端,我选择npm request。我启用了请求的Cookie功能(配置选项request.defaults({ jar: true });)。

登录包含两个单独的请求:

  1. 针对以下内容的简单GET请求:https://www.yourkeystoneapp.com/keystone/session/signin
    • npm请求将收到包含CSRF令牌的cookie。你无需做任何其他事情。 npm请求将使用收到的cookie来处理所有后续的http请求。
  2. 包含带有凭据的简单JSON正文的POST请求:

    {
      email: 'user@yourkeystoneapp.com',
      password: 'yourpassword'
    }
    
  3. 如果凭据正确,Keystone将使用有效的用户对象回答POST请求。
  4. 只要CSRF令牌有效,所有后续的http请求都将成为有效会话的一部分。
  5. 代码示例:

    // enable cookies
    request.defaults({
      jar: true
    });
    
    // first request to obtain the cookie
    request('https://www.yourkeystoneapp.com/signin', {/* some options */});
    
    // second request to POST your credentials
    var loginOptions = {
      method: 'POST',
      url: 'https://www.yourkeystoneapp.come/api/session/signin',
      headers: {
       'content-type': 'application/json',
       'accept': 'application/json'
      },
      body: JSON.stringify({
        email: 'user@yourkeystoneapp.com',
        password: 'yourpassword
      })
    };
    
    // issue POST request.
    request(loginOptions);
    
    // You are now logged in
    

    如果您使用npm request,就像我一样,您必须采取一些措施来同步您发出的请求,因为npm request是异步工作的。