devise를 사용한 로그인 사용자와 로그인되지 않은 사용자 간의 전환

무엇을 하고 싶은가



로그인 한 후 보여주고 싶은 홈 화면을 root_path로 설정했기 때문에
로그인하지 않은 사용자는 앱 추천 페이지로 이동하도록 설정합니다.

설명



이 페이지에 쓰여진 대로 devise를 사용한 것이 됩니다.
아직 devise를 넣지 않은 분은 넣고 나서 이 페이지로 돌아와 주세요.
그런데 본제에 들어갑니다
먼저 컨트롤러의 설명을 변경합니다.

photos_controller.rb
class PhotosController < ApplicationController
  before_action :move_to_index #ここを追加で記述

  def index    
  end
#ここから下を追加で記述
  private

  def move_to_index
    unless user_signed_in?
      redirect_to controller: :homes, action: :index
    end
  end

end

무엇을 하는지 위에서 설명합니다.

before_action :move_to_index



before_action 은 컨트롤러의 모든 액션이 실행되기 전에 어떤 처리를 할 때 사용하는 것입니다.
그 before_action에 move_to_index라는 메소드를 지정합니다.
방법이므로 여기는 여러분이 설명이 다릅니다.
그럼 그 방법은 어디서 정의하고 있는 거야? ? 그것은 나중에 설명합니다.

private



클래스 밖에서 호출할 수 없는 메서드입니다.
Ruby에서는 private이라고 쓰는 다음 코드가 비공개 메서드입니다.
내 해석은이 컨트롤러 내에서만 사용할 수있는 메소드로 해석하고 있습니다. 다르면 죄송합니다...

def move_to_index



여기서 move_to_index를 정의합니다.
방금 before_action :move_to_index로 연결됩니다.
그럼 move_to_index에서 어떤 일을하고 있는지 살펴 보겠습니다.

unless user_signed_in?



user_signed_in?은 devise를 넣는 것으로 사용할 수 있는 헬퍼 메소드입니다
사용자가 로그인했는지 확인
거기에 unless ~가 없다면 같은 의미입니다.
이 단어가 오면 로그인하지 않으면 ~로 다음 줄로 이동합니다.

redirect_to controller: :homes, action: :index



조금 문장이 길기 때문에
redirect_to에 우선 주목합니다. 이것은 지정된 URL로 전환 할 수있는 메소드입니다.
그래서

controller.rb
redirect_to "http://www.○○○○.com"

하지만 가능합니다.

controller.rb
redirect_to root_path

와 같이 Prefix 이름도 지정할 수 있습니다.

controller.rb
redirect_to controller: :homes, action: :index

마지막으로 지정한 컨트롤러의 동작을 지정할 수도 있습니다.

그 밖에도 아직 할 수 있으므로 꼭 검색해 보세요

이것으로 흐름으로서
index가 로드되기 전에 before_action에서 먼저 mobe_to_index 메소드를 읽습니다. 그 중에는 사용자가 로그인하지 않은 경우 여기로 전환하면 설정할 수있었습니다.

라우팅



컨트롤러에서
redirect_to controller: :homes, action: :index

그리고 마지막으로 작성되었습니다.
homes 컨트롤러의 index 액션이 호출됩니다.

routes.rb
get '/homes/home', to:'homes#index'

작성
/homes/home은 URL 이름 지정입니다.

이런 느낌이 되고 있습니다.
그리고 homes#index
homes 컨트롤러의 index 액션을 지정합니다.
이것으로 끝

좋은 웹페이지 즐겨찾기