rails 独学して軽くにちゃんまとめつくる

読者です 読者をやめる 読者になる 読者になる

ログイン前後の制御

ログイン前後でヘッダーの画面を切り替えるのはすでにしているが、ログインしないと見れないページを作成したり、編集できるのは自分のプロフィールだけにしたりなどしなきゃならないことはまだまだある。それをしていくのがこの記事の目的。

 

 

コントローラー

app/controllers/users_controller.rb

before_action :logged_in_user, only: [:indes, :edit, :update, destroy]

before_action :correct_user  , only: [:edit, :update]



private

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

end

 

def correct_user
    @user = User.find(params[:id])
     redirect_to(root_url) unless current_user?(@user)
end

 

 

ヘルパー

app/helpers/sessions_helper.rb

#現在のユーザーがログイン済みならtrue
  def current_user?(user)
    user == current_user
  end

 

 

フレンドリーフォワーディング

 

セッションヘルパー

# 記憶したURL (もしくはデフォルト値) にリダイレクト
  def redirect_back_or(default)
    redirect_to(session[:forwarding_url] || default)
    session.delete(:forwarding_url)
  end

  # アクセスしようとしたURLを覚えておく
  def store_location
    session[:forwarding_url] = request.original_url if request.get?
  end

 

 

ログインを要請するときにページを保存しておく

users_controller.rb

private 
    def log_in_user
      unless logged_in?
        flash[:danger] = "ログインをしてください"
        store_location

        redirect_to login_path
      end
    end 

 

ログインをしたあとに元のページにもどしてあげる

セッションこんとろーら 

def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)
      redirect_back_or user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end