2016-03-03 98 views
1

使用sydjs的书让一切工作KeystoneJS注册通过REST请求

我试图通过API上申请通过POST请求的用户:

/API /应用/注册电子邮件

每当我只通过电子邮件发送数据& pass - 一切正常。如果我尝试添加名称参数 - 它总是失败。 登记在前端的工作,因为它应该

发送的数据为:

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

也许有人已经包含任何想法,为什么它不工作为名?谢谢。

+0

传递此类参数时,您应该发送一个对象而不是数组:使用{}这些大括号代替[] – JasperV

+0

嗯,会尝试,thx –

回答

0

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

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

这将有助于KeystoneJS signin

0

我实现了对重点(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请求。包含一个简单的JSON体使用您的凭据
  2. 一个POST请求:

    { 
        email: '[email protected]', 
        password: 'yourpassword' 
    } 
    
  3. 后请求将由梯形有效的用户对象回答时,如果证明是正确的。
  4. 只要CSRF令牌有效,所有后续的http请求都将成为有效会话的一部分。

代码示例:

// 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: '[email protected]', 
    password: 'yourpassword 
    }) 
}; 

// issue POST request. 
request(loginOptions); 

// You are now logged in 

如果您正在使用npm request,像我一样,你必须采取几个措施来同步您发出请求,如npm request以异步方式工作。利用npm request的API及其回调函数是强制性的。