2011-09-16 9 views
3

私は現在、通常のビジュアルWebアプリケーションgoopに加えて、外部アプリケーションで使用するためのいくつかのRESTful APIサービスを公開するアプリケーションで作業しています。私はDeviseを使ってユーザー認証を管理していますが、特定の入力を与えられたユーザーを「手動で」認証する方法には苦労しています。APIのレール認証

私が持っている場合は、実際に画面のビジュアルログに行くなどの方法で、APIのユーザーにログインさせる必要があるということです。ユーザー名とパスワードを送信してから、私のAPIサービス。

私は、Deviseが提供するsign_inメソッドを使用する際にユーザーにサインすることができますが、それは認証を完全に無視するようです。ここで私がしたかったことはもう少し詳しく説明しました:

ユーザコントローラでconnectというGETルートがあるとします。コントローラーはDevise登録コントローラー全体を交換しますが、セッション1コントローラーは交換しません。私のサービスのURLは次のようになります。

<server>/users/connect 

、それは私の質問の無神経な人に具体的かつ重要でないいくつかのサービスに加えて、「メール」、「パスワード」パラメータを期待します。 - それはそうでは一般化だ、私はこれを行うために考案ソース内の方法を見つけることができなかった

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サービスのために私に多くを提供します...

ありがとう!

私は工夫のtoken_authenticatableは、このために行くための方法です

答えて

2

番目アウト残してきました。私たちはapiベースのログインを何度も成功させています。 user.rbで設定/初期化子/ devise.rb

config.token_authentication_key = :nameofyourapikeyhere 

:上記で

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