61725

[code]

    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
    
[/code]

までやって `localhost:3000/users/sign_in` にアクセスすると  
ログイン画面が表示されてうまくいったかと思ったんですけど  
`localhost:3000/memo/` にアクセスすると一覧が表示されてしまいます

devise は単にユーザモデルとログイン画面を作るだけのジェムで  
アクセス制限とかは自前で .htaccess とかをかく必要があるということですか？


CC BY-SA 4.0
2019-12-23T15:31:39.213
61717
2019-12-24T13:18:14.160
2019-12-24T13:18:14.160
question
ruby-on-rails devise
devise でアクセス制限をかける方法


ログインしなければ見せたくないコントローラー  
例えば app/controller/memos_controler に

`before_action :authenticate_user!`

とかけばログインしてない場合コントローラー内に制御がくる前に  
401 エラーになりログイン画面にリダイレクトされます

before_action はコントローラーのメソッドを実行する前に呼ばれる Rails のメソッドで  
それをオーバーライドして devise の authenticate_user メソッドを呼ぶことで  
ログインしてない場合に４０１を返すことができ、  
それを受けて devise がログインフォームにリダイレクトします  
（この辺も単に401ページを表示するだけとか設定 config/initializer/debvise.rb で変えられます）

あとログインユーザによって管理者、一般ユーザ等権限を分けて見られるページを細かく制御したい場合は  
cancancan というジェムを併用するといいと思います

* * *

ちなみに質問タイトル device ではなく devise です


CC BY-SA 4.0
2019-12-24T02:16:50.107
61725
2019-12-24T02:23:35.763
2019-12-24T02:23:35.763
61717
answer