2015-01-02 73 views
0

我正在使用Rails 4構建API並使用Devise進行身份驗證。我也覆蓋登錄用戶的SessionsController。我有一個名爲user的資源,並且已經設置了相應的devise_for路由。該create操作如下:設計登錄導軌的自定義參數4

def create 
self.resource = warden.authenticate(auth_options) 
## Handle error/success json based on resource 
....... 
end 

由於資源是user如果我做一個curl與像數據PARAMS:

{"user": {"email": "[email protected]", "password": "password"} } 

它的工作原理。

我想知道的是我如何定製參數,以便devise/warden能夠適當地選擇它。 即,我想發送以下請求數據,並應驗證:

{"email": "[email protected]", "password": "password"} 
+0

你是說你想讓它們嵌套在'user'對象下? – kurenn

+0

不,我不希望它嵌套在一個對象下。它應該像params [:email]和params [:password],而不是params [:user] [:email] – swaroopsm

+0

您可能必須覆蓋devise會話控制器以及資源的authenticate方法,退房在wiki上的文章獲取更多信息https://github.com/plataformatec/devise/wiki/How-Tos#custom-authentication-methods – kurenn

回答

1

您可以直接創建自己的控制器,敷用這樣的用戶參數:

# app/controllers/sessions_controller.rb 
class SessionsController < Devise::RegistrationsController 
    wrap_parameters :user 
end 

# app/config/routes.rb 
devise_for :users, controllers: sessions: 'sessions' 

wrap_parametersconfiguring devise controllers

+0

嗨@alex感謝讓我知道'wrap_parameters'。儘管使用相同的'rspec'返回失敗。 – swaroopsm

+0

@swaroopsm你可以調試,看看現在是否正確包裝參數?錯誤可能是由其他原因造成的 –

+0

是的,參數被正確包裝。當我做一個捲曲請求時,它似乎工作正常。但是我的規格失敗了!我需要在我的規格中的某處包含「ActionController :: ParamsWrapper」嗎? – swaroopsm