QA@IT

Deviseプラグインのsign_upを制御する

2407 PV

現在rails3.2でDeviseプラグインを使ってログイン制御をしています。
しかしながら、デフォルトの設定では誰でもsign_upで新規のアカウントを作成してアクセスできるので、これを制御したいと考えました。
そこでdeviseのコントローラに「before_filter :authenticate_user!」というようなフィルターをかけて、ログインしないとsign_upができないようにしたいのですが、コントローラがフォルダの中に見当たらなくて困っています。なにかいい方法はないでしょうか?

---この問題に対してとった対策---
$rails g
でコントローラを作成するジェネレータを探しました。しかし見つかりませんでした。

  • 「ログインしないとsign_upできない」というのがよくわかりませんでした。サインアップ機能そのものをなくしたいという話でしょうか。 -

回答

Deviseでジェネレータが用意されているのはViewだけで、
ControllerやModelについては継承で作成します。
sign upの処理を変えたいならDevise::RegistrationsControllerDevise::SessionsControllerなどを継承したControllerを定義すればいい気がします。
下記のサイト等が参考になると思います。

また、デフォルトではsign inページのViewでsign upへのリンクが表示されています。これを削除するにはViewを上書きします。

app/views/devise/shared/というディレクトリを作成し、その中に_links.erbを入れます。(hamlやslimに変換しても構いません)

そして、_links.erb中の

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
  <%= link_to "Sign up", new_registration_path(resource_name) %><br />
<% end -%>

を削除してください。

Viewを大規模に変更する場合は、rails generate devise:viewsコマンドを実行するとデフォルトのViewが全て生成されます。

編集 履歴 (0)
  • なるほど、継承して、ルーティングにそれを読み込ませればよかったんですね。
    おかげさまでアクセス制御できました。ありがとうございます、
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。