2016-03-03 101 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及其回調函數是強制性的。