LoginSignup
1
0

More than 5 years have passed since last update.

railsアプリでログインをされていないユーザーをログイン画面に飛ばす

Posted at

ログインしていないユーザーがログインできてしまう

ログイン機能を実装したもののログインをしていないと使えない機能でも直接urlからアクセスすると使えてしまう。
この状況は非常にまずい。
ってことで調べた。

before_actionを使う

この機能を実装するためにはbefore_actionを使えばok
before_actionとはまあ書いて字のごとくなんだけどアクションが実行される前に実行されるもの。
字でつらつら書くのはわかりづらいと思うので実際の例を書く。

before_action実装前

スクリーンショット 2019-01-31 21.08.48.png
これがトップ画面。
スクリーンショット 2019-01-31 21.09.37.png
urlを見てもらうと/usersとなっているがこれは本来ログインをしていないと見れない機能。これは非常にまずい。だってログインしなくても使えるんだからね笑

before_action実装

application_controller.rb
before_action :logged_in_user

def logged_in_user
      unless logged_in?
        flash[:danger] = "Please log in."
        redirect_to login_url
      end
end

def logged_in?
    !current_user.nil?
end


上から順に説明していく
一番上にbefore_actionを書く。また、:以下は自分で定義したものによって記述は変わる。

最初の定義についてはログインをしていなかったらログインのパスにリダイレクトする。
次の定義については比較演算子を用いてcurrent_userがnilでない状態つまりcurrent_userがいる状態。

その他のコントローラの設定

上のままの状態だとログインのページしかいけなくなってトップページにもいけないし、新規会員登録画面にもいけなくなる。
これを改善するにはskip_before_actoinを使う。

users_controller.rb
skip_before_action:logged_in_user,only:[:new,:create]

sessions_controller.rb
skip_before_action:logged_in_user
pages_controller.rb
skip_before_action :logged_in_user

それぞれに記述していく。ちなみにpagesコントローラーはトップページのコントローラー。
以上で実装終わり。
かなり簡単だった。

before_action実装後

スクリーンショット 2019-01-31 21.36.41.png
ログインしていない状態でusersにアクセスしようとするとこのようにログインページに飛ばすようにできた。
似たような実装をrailsチュートリアルにあった。参考にするといいかも。
http://useless.hatenablog.com/entry/2016/07/12/190000
このページも参考にした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0