質問: ``` rails new mysite -d mysql cd mysite rails g scaffold memo db/migrate/xxxxxxxxxx を編集して t.string 'memo' 追加 rake db:migrate で localhost:3000/memo で index 画面確認 Gemfile に gem 'device' 追加 bundle install rails g devise:install rails g devise user rake db:migrate ``` までやって `localhost:3000/users/sign_in` にアクセスすると ログイン画面が表示されてうまくいったかと思ったんですけど `localhost:3000/memo/` にアクセスすると一覧が表示されてしまいます devise は単にユーザモデルとログイン画面を作るだけのジェムで アクセス制限とかは自前で .htaccess とかをかく必要があるということですか?
回答: ログインしなければ見せたくないコントローラー 例えば app/controller/memos_controler に `before_action :authenticate_user!` とかけばログインしてない場合コントローラー内に制御がくる前に 401 エラーになりログイン画面にリダイレクトされます before_action はコントローラーのメソッドを実行する前に呼ばれる Rails のメソッドで それをオーバーライドして devise の authenticate_user メソッドを呼ぶことで ログインしてない場合に401を返すことができ、 それを受けて devise がログインフォームにリダイレクトします (この辺も単に401ページを表示するだけとか設定 config/initializer/debvise.rb で変えられます) あとログインユーザによって管理者、一般ユーザ等権限を分けて見られるページを細かく制御したい場合は cancancan というジェムを併用するといいと思います ちなみに質問タイトル device ではなく devise です