session을 사용하여 전환 소스의 이전 페이지로 돌아가는 방법

4554 단어 payjpRailsRails5

이런 사람에게 추천



이런 일을 하고 싶은 사람.
뒤로 버튼을 눌러 브라우저의 두 페이지 이전 페이지로 돌아가고 싶습니다.


환경


ruby 2.5.1
Rails 5.0.7.2

바로 결론


session 를 사용합시다.

이번 경위


  • 구매 기능이 있는 WEB 사이트를 작성하고 있었다(payjp를 이용)
  • 상품의 상세를 표시해 그대로 구입할 수 있는 기능을 갖게 했다
  • 단, 신용 카드를 등록하지 않은 경우, 다음 페이지 천이로하고 싶다.



    ※위 그림의 왼쪽 1에서 오른쪽 3으로 가는 흐름

    1. 상품 확인 페이지에서 구매 버튼을 누릅니다.
    2.구입 완료 전에 신용카드 등록 페이지 천이하여 카드 등록을 한다
    3. 『이 정보로 등록했어』라는 확인 페이지로 전환

    문제점



    뒤로 버튼을 누르면 이전 카드 등록 페이지로 돌아갑니다.
    (정확하게는 카드 등록 페이지에서 리디렉션되는 페이지로 돌아간다)

    【해결책】 session을 사용하여 전환 소스 이전의 리퍼러를 유지합시다.



    전체상


    class CardsController < ApplicationController
    
      require "payjp"
    
      before_action :sign_in_required
      after_action :session_clear, only: [:show]
    
      def new
        session[:previous_url] = request.referer
      # 〜以下省略〜
      end
    
      def pay
        # 〜省略〜 カード登録のコードが入ります
      end
    
      def delete
        # 〜省略〜 カード削除後のコードが入ります
      end
    
      def show 
        @session = session[:previous_url]
        # 〜省略〜 カード登録後のコードが入ります
      end
    
      private
    
      def sign_in_required
        # 〜省略〜 ユーザー登録していない場合はユーザー登録ページに遷移するコードが入ります
      end
    
      def session_clear
        session[:previous_url].clear
      end
    
    end
    

    이번에 사용한 controller 내의 코드 발췌



    처음으로 카드 등록을 할 때 정의하고 있는 new 액션에 기술


    # URLを保存する処理
    # sessionにひとつ前のリファラーをいれる 
    session[:previous_url] = request.referer
    
    :previous_url 라는 것은 devise 를 넣고 있는 경우는 기술하는 것만으로 이용할 수 있습니다.request.referer 라는 것은, 이전의 URL (즉, 천이원 URL)을 취득하는 것입니다.

    카드 등록 확인 화면의 show 액션에 설명


    # sessionの中からURLを取り出してリダイレクトさせる
    @session = session[:previous_url]
    

    view에서 사용하고 싶기 때문에 대입한 것에 한층 더 대입해 인스턴스를 생성합니다.

    새 session_clear 액션을 작성하고 after_action으로 호출


    # sessionをクリア
    session[:previous_url].clear
    

    축적된 session 해방해 주는 편이 시큐리티상에서도 좋다고 되어 있습니다.

    이제 이상적인 전환 소스로 돌아갈 수있었습니다.


    끝.
  • 좋은 웹페이지 즐겨찾기