Deviseで不要な機能、ルーティングをオフにする

Okayama.rbでとあるプロジェクトをしているのですが、その最初のほうを自分が作り込むから待っててくれといって早数週間。めっちゃDeviseでハマってました…。
rails-apiを使って、jsonを返すだけのapiサーバーを作ろうとしているので、deviseでのログインはトークンからだけでいい。
なので、config/routes.rbでdevise_forを使わないでもいいだろうと思ってコメントアウトしたらテストが死んでしまったので調査開始。

また、グループウェア的なのを作ろうとしているのだけれど、だれでも登録できるグループウェアだとダメなので、登録機能をオフにするのもどうすればいいんだろう?と思っていたら、自分でオンにしているだけだった…。まず登録機能をオフにするには:registerableをコメントアウトすればいい。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable,
         # :registerable,
         :recoverable,
         :trackable,
         :validatable,
         :token_authenticatable
end

これでregistration系のルーティングは消せます。

次に、ログイン(サインイン)用のルーティングを消します。
これはルーティング側に書きました。skip: [:sessions]らしいです。
また、Deviseのルーティングは普通のusersを使ってしまうとユーザー管理のコントローラと被ってしまうので、敢えてこれを変更しておきました。それがpath: :meの部分です。

devise_for :users, path: :me, skip: [:sessions]
resources :users, except: [:new, :edit]

これによって設定されたルーティングはこうなりました。

     user_password POST   /me/password(.:format)      devise/passwords#create
 new_user_password GET    /me/password/new(.:format)  devise/passwords#new
edit_user_password GET    /me/password/edit(.:format) devise/passwords#edit
                   PATCH  /me/password(.:format)      devise/passwords#update
                   PUT    /me/password(.:format)      devise/passwords#update
             users GET    /users(.:format)            users#index
                   POST   /users(.:format)            users#create
              user GET    /users/:id(.:format)        users#show
                   PATCH  /users/:id(.:format)        users#update
                   PUT    /users/:id(.:format)        users#update
                   DELETE /users/:id(.:format)        users#destroy

パスワード更新用のルーティングと普通のユーザー管理用のルーティングのみ残すことに成功。やったね!


カテゴリー Ruby, Ruby on Rails | タグ   | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です