2011-09-16 188 views
3

我目前正在開發一個應用程序,除了通常的可視化Web應用程序goop外,還將公開一些RESTful API服務供外部應用程序使用。我正在使用Devise來管理用戶身份驗證,但我正在努力如何在給定輸入的情況下「手動」驗證用戶身份。API的rails身份驗證

我遇到的情況是,我希望API的用戶無需登錄屏幕等實際登錄到可視化日誌。我希望他們提交用戶名和密碼,然後進行身份驗證並在其中籤名我的API服務。

我知道您可以使用Devise提供的sign_in方法對用戶進行簽名,但似乎完全忽略了身份驗證。這裏是我想要做的更詳細的解釋:

假設在用戶控制器中調用connect的GET路由。控制器完全取代設計註冊控制器,但不是第一個會議。該URL我的服務是:

<server>/users/connect 

,並期望除了一些具體的和不重要的,以我的問題GOOP服務「電子郵件」,「密碼」參數。

我想知道的是如何實現的東西,相當於以下僞代碼:

def connect 
    user = User.find_by_email(params[:email]) 
    password = params[:password] 
    # here is the part I'm pseudo coding out 
    if user.is_valid_password(password) 
    ...do my stuff... 
    end 

    render :json ...etc... 
end 

我一直無法找到在設計源的方法來做到這一點 - 它是如此的一般化很多方面,我可能只是想念它。

任何人有任何想法?我希望不要a)必須實現我自己的事情,並且b)不必離開Devise。它爲我提供了非API服務...

謝謝!

我已經離開了個

回答

2

設計的token_authenticatable是去這樣做的方式。我們已經多次成功地使用它來做基於api的登錄。

在配置/初始化/ devise.rb

config.token_authentication_key = :nameofyourapikeyhere 

在user.rb:

devise … token_authenticatable, ... 

在上面,你能說出的API密鑰東西,然後讓您的路線/用戶/ connect?apikey = whatever(以apikey爲例)。在數據庫中,它將是authentication_token,但它可以正常工作。

爲了澄清,如果用戶有一個authentication_token並且它是以params(或者它的別名 - 在上面的例子中是:apikey)發送的,他們將會登錄。

+0

很酷,我會研究這個想法。謝謝:) – jaydel

+0

現在已經棄用了,任何人都知道如何使用新的實現來構建它? – halbano

+0

您應該使用https://github.com/lynndylanhurley/devise_token_auth進行基於標記的設計認證。 – plunntic