ボクココ

個人開発に関するテックブログ

Devise を JSON API 化する

DeviseをAPI経由で叩きたい。
そのためにはフォームじゃなくて全部Ajaxで通信するので、各アクションで何のパラメータが必要かをまずまとめた。

AngularJSを使い出すと、そうせざるを得ないので、ちょっとレールから外れるかな。

Prefix Verb   URI Pattern                    Controller#Action
new_user_session GET    /users/sign_in(.:format)       devise/sessions#new


user_session POST   /users/sign_in(.:format)       devise/sessions#create
<%= f.email_field :email, :autofocus => true %>
<%= f.password_field :password %>
<%= f.check_box :remember_me %>
destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy

user_password POST   /users/password(.:format)      devise/passwords#create
<%= f.email_field :email, :autofocus => true %>

PUT    /users/password(.:format)      devise/passwords#update
<%= f.hidden_field :reset_password_token %>   #-> url parameter でくっついてくる
<%= f.password_field :password, :autofocus => true %>
<%= f.password_field :password_confirmation %>


user_registration POST   /users(.:format)               devise/registrations#create
<%= f.email_field :email, :autofocus => true %>
<%= f.password_field :password %>
<%= f.password_field :password_confirmation %>

PUT    /users(.:format)               devise/registrations#update
<%= f.email_field :email, :autofocus => true %>
<%= f.password_field :password, :autocomplete => "off" %>
<%= f.password_field :password_confirmation %>
<%= f.password_field :current_password %>


DELETE /users(.:format)               devise/registrations#destroy
none

user_confirmation POST   /users/confirmation(.:format)     devise/confirmations#create
<%= f.email_field :email, :autofocus => true %>

user_unlock POST   /users/unlock(.:format)           devise/unlocks#create
<%= f.email_field :email, :autofocus => true %

これを元にパラメータを作って送るのはそれで結構なのだが、サーバ側ではJSONで返すためのつくりが必要のようだ。DeviseはデフォルトではHTMLを返して使い物にならないので、独自に実装する。
セッションを作る系は参考になりそうなものがあったが、その他はDeviseのソースコードを読んでやりくりしていくしかなさそうだ。。
むしろこれだったらDevise使う意味が殆ど感じられないので、 warden のみで実装できないか模索中。
何か他にいい方法があれば教えてください。