通常のブラウザリクエストと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形式のリクエストであることをヘッダーに指定すると、その応答が得られるのはなぜですか?
私は追加して、それがうまくなさある日、この問題を解決しようとすると、私はそれを把握10分後にスタックオーバーフローに転記します。申し訳ありませんが、少なくともそれが誰かを助けることを願っています。 –
あなたのコメントを回答として投稿し、それを受け入れてください。 – awendt