2012-03-04 9 views
1

通常のブラウザリクエストとAndroidアプリケーションからのJSONを使用したモバイルリクエストの両方に応答するウェブサイトを構築したいと思います。 私は認証のためにdeviseを使用します。 Webユーザーは通常どおりログインしますが、モバイル用には、ログイン/パスワードを一度だけ送信してから、認証トークンを使用する必要があります。HTTPリクエストフォーマットに応じたレスポンス

class SessionsController < Devise::SessionsController 

skip_before_filter :verify_authenticity_token 
respond_to :html, :json 

def create 
    resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new") 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 

    obj1 = MyModel.find(21) 
    obj2 = MyModel.find(22) 

    respond_to do |format| 
     format.html do 
     render :json => obj1 
     end 
     format.json do 
     render :json => obj2 
     end 
    end 
end 
def destroy 
    super 
end 
end 

これは単なるrespond_toに実行されます。その場合知って、実際にダミーのコードです: はこれを行うには、私が工夫セッションコントローラをオーバーライド。 このように、ログイン情報を渡して、POSTリクエストを作成する場合:

curl -v -X POST -d '{"user" : { "email" : "[email protected]", "password" : "123456"}}' -H "Content-Type:application/json" http://localhost:3000/users/sign_in 

応答がOBJ1のJSON表現があります。つまり、respond_toでは、常にformat.htmlエントリが実行されます。 このコードで何が問題になっていますか?これがJSON形式のリクエストであることをヘッダーに指定すると、その応答が得られるのはなぜですか?

+1

私は追加して、それがうまくなさある日、この問題を解決しようとすると、私はそれを把握10分後にスタックオーバーフローに転記します。申し訳ありませんが、少なくともそれが誰かを助けることを願っています。 –

+1

あなたのコメントを回答として投稿し、それを受け入れてください。 – awendt

答えて

0

私はそれが追加働かせた:-Hは、「同意する:アプリケーション/ JSONを」:-Hは「同意する:アプリケーション/ JSONを」

関連する問題