学習記録

アウトプット用に作りました

ログイン後にログインページとサインアップのページに遷移できないようにする

ログインしているユーザーがログイン画面、またユーザー新規登録画面にアクセスできるようになっていたので修正していこうと思います。

どうやって直していくのか少し考えます、、、

  • ビューファイルでも、モデルでもなくコントローラをいじらないといけない。
  • user_sessions#newとusers#newが該当のアクションになる
  • 現在のユーザーが判別できたらリダイレクトする仕様にする

この感じの流れで解決できそうだと思ったので実装していきます。

まず最初にログイン画面(user_sessions#new)のアクションを修正していきます。current_userがログインしているならリダイレクトするというコードを記入しました。このコードはlogged_in?メソッドがないというメソッドエラーになります。Sorceryのメソッドですが、ビューでのみ使えるメソッドのようです。

class UserSessionsController < ApplicationController

省略

  def new
    if current_user.logged_in?
      redirect_to user_diaries_path(current_user.name), danger: t('.fail')
    end
  end

省略

end

もしcurrent_userならリダイレクトするというコードを書いたらどうだろうと思ったので実装していきます。このコードで思っていた実装ができました!!

class UserSessionsController < ApplicationController

省略

  def new
    if current_user
      redirect_to user_diaries_path(current_user.name), danger: t('.fail')
    end
  end

省略

end

ログイン画面へのアクセス制限ができたので、次はユーザー登録画面のアクセス制限を行います。コードは同じように書いていきたいと思います。こちらも実装できました!

class UsersController < ApplicationController
  
省略

  def new
    @user = User.new
    if current_user
      redirect_to user_diaries_path(current_user.name), danger: t('.fail')
    end
  end

省略

end

あとはi18nの設定を追加して実装は終わりです。