양식이 리디렉션되는 위치 변경

더 강함

다음은 사용자 (로그인하지 않은 사용자)가 내가 이메일로 보낸 확인 링크를 따라갈 때 사용자 확인이 작동하는 방식입니다.

업데이트 : 좋습니다. 사용자 확인은 단순히 이메일 주소가 존재하는지 테스트하는 것이며 보안과는 아무 관련이 없습니다. 그렇긴하지만이 질문을 예로 들어 양식의 리디렉션 위치를 변경하는 방법을 알고 싶습니다.

they follow confirm path -> redirect to sign in form -> they sign in correctly -> 
they have to follow link again -> they reach the confirm action -> they are confirmed

이것은 약간 어색합니다. 차라리 이런 일이 발생합니다.

they follow confirm path -> redirect to sign in form -> they sign in correctly -> 
they reach the confirm action -> they are confirmed

두 번째로 링크를 따라갈 필요를 없애고 싶지만 어떻게 진행해야할지 잘 모르겠습니다. 내 로그인 양식은 다음과 같습니다.

<%= form_for(:session, url: sessions_path) do |f| %>
    <%= f.label 'Email address' %><br>
    <%= f.text_field :email, class: 'form-control', placeholder: 'Enter email' %><br>

    <%= f.label 'Password' %><br>
    <%= f.password_field :password, class: 'form-control', placeholder: 'Enter password' %><br>


    <%= f.submit 'Sign In', class: 'btn btn-default' %>
<% end %>

내 세션에 매개 변수를 전달합니다. # create 작업 :

def create
    user = User.find_by(email: params[:session][:email].downcase )

    if user && user.authenticate(params[:session][:password])
        sign_in(user)
        redirect_to user_path(current_user)
    else
        flash.now[:error] = 'Wrong email or password!'
        render 'new'
    end
end

이제 핵심이 조치의 5 행에 있다고 생각합니다.

redirect_to user_path(current_user)

그것은 변경되어야합니다. 여기서 함께 뭔가를 해킹 할 수 있다고 확신하지만 어떻게 문제를 해결할 수 있는지 알고 싶습니다.

  • confirm_path의 액션은 우리가 원하는 새로운 경로를 저장할 변수를 설정해야합니다.
  • 그런 다음 redirect_to 만들기 작업은 기본 user_path보다이 변수를 사용해야합니다.
  • 그런 다음 다시 로그인해도 확인 작업으로 리디렉션되지 않도록 변수를 비워야합니다.
  • 이렇게하려면이 변수를 어디에 저장해야합니까? 세션에서?
  • 필요한 경우 다른 양식에 대해 쉽게 수행 할 수 있도록 가장 개방적인 방식으로이 문제를 해결하려면 어떻게해야합니까?
  • 이를 염두에두고 경로를 저장하는 변수는 아마도 해시 여야하며 여러 키 값 쌍이 될 것입니다. 그런 다음 동적 양식의 생성 작업은 해당 양식과 관련된 키 값만 확인합니다.
  • 나는 사람들이 배우는 것을 막기 때문에 보석에 알레르기가 있습니다. 그러나 이것을하는 것을 알고 있다면 나는 여전히 알고 싶습니다. 하지만 먼저 어떻게해야하는지 보여주세요 :)
Paritosh piplewar

그렇긴하지만이 질문을 예로 들어 양식의 리디렉션 위치를 변경하는 방법을 알고 싶습니다.

나는 당신에게 아이디어와 모든 사람들이 따르는 가장 일반적인 연습을 줄 수 있습니다.

사용자가 로그인하지 않은 경우 요청 된 경로를 저장하고 해당 부분으로 리디렉션하면됩니다. Devise gem은 동일한 전략을 사용합니다. 사용하는 경우 이점을 활용할 수 있습니다.

일반적인 해결책을 설명하고 있습니다. 저장된 위치를 저장하고 얻으려면 application컨트롤러에 두 가지 방법이 필요합니다.

store_location : 위치를 저장하기 위해 로그인 후 리디렉션합니다.

def store_location(location)
  if location
    uri = URI.parse(location)
    session["return_path"] = [uri.path.sub(/\A\/+/, '/'), uri.query].compact.join('?')
  end
end

stored_location: 저장된 위치 (시도한 위치)를 검색합니다. 세션 경로도 삭제합니다 (마지막 부분에서 설명하겠습니다).

def stored_location
 location = session["return_path"]
 session.delete("return_path")
 location
end

confirmation컨트롤러 에서 이와 같은 작업을해야합니다.

before_action: authenticated!

def authenticated!
  unless signed_in?
    store_location_for(request.original_url)
    redirect_to sign_in_path
  end
end

session#create컨트롤러를 사용자 지정하기 만하면 다음과 같이 작동합니다.

 redirect_to stored_location ||  user_path(current_user)

자, 당신의 senerio를 고려하십시오

  1. 그들은 확인 경로를 따릅니다
  2. 로그인 양식으로 리디렉션 (세션에 경로 확인 위치도 저장)
  3. 그들은 올바르게 서명하고 경로를 확인하기 위해 리디렉션되므로 추가 단계를 제거했습니다.
  4. 사용 확인, 작업 및 로그 아웃을 가정 해 보겠습니다. 그는 사이트를 방문하여 로그인 버튼을 클릭하고 정상적으로 로그인을 시도합니다. 세션에서 마지막으로 시도한 URL을 제거 / 삭제하지 않은 경우이를 방지하기 위해 동일한 위치로 리디렉션됩니다session.delete("return_path") .

이것이 명확 해지기를 바랍니다.

추신 : 위의 코드는 추상적 인 아이디어입니다. 역할 기반 앱이있는 경우 위치 범위를 다르게 지정해야합니다.이 주제를 훨씬 넘어서서 설명하지 않았습니다. 더 자세히 알고 싶다면 gem 사양을 읽어보세요.devise

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

htaccess-404 페이지로 리디렉션되지 않는 경우 현재 디렉터리 및 하위 디렉터리에 파일이 있는지 확인

분류에서Dev

경로로 리디렉션되지 않는 양식 작업

분류에서Dev

디렉토리 이름에서 단어의 위치 변경

분류에서Dev

정규식과 일치하는 하위 디렉터리의 이름을 재귀 적으로 변경

분류에서Dev

상대 경로가 리디렉션되지 않는 위치 헤더

분류에서Dev

양식 제출 후 헤더 위치가 리디렉션되지 않음

분류에서Dev

zuul이 http 헤더 위치에서 dowstream 서비스 리디렉션 IP를 변경하지 않는 이유는 무엇입니까?

분류에서Dev

위치 변경 애니메이션

분류에서Dev

Android : Seekbar 양식 위치 변경

분류에서Dev

델파이 : TreeView 요소 대 양식 위치 변경

분류에서Dev

필드가 이미있는 경우 편집하기 위해 Rails 새 양식에서 리디렉션 하시겠습니까?

분류에서Dev

Wagtail 관리자 : 중재를 위해 변경 사항을 제출 한 후 사용자가 리디렉션되는 위치를 제어하는 방법

분류에서Dev

프로그램이 설치되는 기본 디렉토리를 변경하는 방법

분류에서Dev

zotero 독립형으로 데이터 디렉토리 위치 변경

분류에서Dev

zotero 독립형으로 데이터 디렉토리 위치 변경

분류에서Dev

시계열의 값이 변경되지 않은 위치 식별

분류에서Dev

리디렉션 후 Django URL이 변경되지 않습니다.

분류에서Dev

리디렉션 후에도 Django URL이 변경되지 않음

분류에서Dev

301 폴더 리디렉션이없는 경우 .htaccess 드롭 다운을 상위 디렉터리로 이동

분류에서Dev

nginx 위치 리디렉션이 너무 많은 리디렉션

분류에서Dev

배치 파일을 호출하는 대신 리디렉션하면 배치 파일이 변수로 유지되지 않는 이유

분류에서Dev

Angular 4, Router 4.0.0 : routerLink 또는 router.navigate는 프로그래밍 방식으로 하위 경로로 리디렉션되지 않습니다.

분류에서Dev

도메인이 여러 예외와 일치하는 경우 htaccess 리디렉션

분류에서Dev

JavaScript-양식의 텍스트 필드에서 기본값이 변경된 경우 강제 리디렉션

분류에서Dev

JavaScript-양식의 텍스트 필드에서 기본값이 변경된 경우 강제 리디렉션

분류에서Dev

페이지를 변경하지 않는 PHP 리디렉션

분류에서Dev

하위 도메인이 지정되지 않은 경우 nodejs에서 HTTP-> HTTPS 리디렉션이 실패하는 이유는 무엇입니까?

분류에서Dev

thank-you.html로 리디렉션되지 않는 양식 제출 후 경고 상자를 원합니다.

분류에서Dev

Ubuntu 터미널에 디렉토리 이름이 표시되는 방식 변경

Related 관련 기사

  1. 1

    htaccess-404 페이지로 리디렉션되지 않는 경우 현재 디렉터리 및 하위 디렉터리에 파일이 있는지 확인

  2. 2

    경로로 리디렉션되지 않는 양식 작업

  3. 3

    디렉토리 이름에서 단어의 위치 변경

  4. 4

    정규식과 일치하는 하위 디렉터리의 이름을 재귀 적으로 변경

  5. 5

    상대 경로가 리디렉션되지 않는 위치 헤더

  6. 6

    양식 제출 후 헤더 위치가 리디렉션되지 않음

  7. 7

    zuul이 http 헤더 위치에서 dowstream 서비스 리디렉션 IP를 변경하지 않는 이유는 무엇입니까?

  8. 8

    위치 변경 애니메이션

  9. 9

    Android : Seekbar 양식 위치 변경

  10. 10

    델파이 : TreeView 요소 대 양식 위치 변경

  11. 11

    필드가 이미있는 경우 편집하기 위해 Rails 새 양식에서 리디렉션 하시겠습니까?

  12. 12

    Wagtail 관리자 : 중재를 위해 변경 사항을 제출 한 후 사용자가 리디렉션되는 위치를 제어하는 방법

  13. 13

    프로그램이 설치되는 기본 디렉토리를 변경하는 방법

  14. 14

    zotero 독립형으로 데이터 디렉토리 위치 변경

  15. 15

    zotero 독립형으로 데이터 디렉토리 위치 변경

  16. 16

    시계열의 값이 변경되지 않은 위치 식별

  17. 17

    리디렉션 후 Django URL이 변경되지 않습니다.

  18. 18

    리디렉션 후에도 Django URL이 변경되지 않음

  19. 19

    301 폴더 리디렉션이없는 경우 .htaccess 드롭 다운을 상위 디렉터리로 이동

  20. 20

    nginx 위치 리디렉션이 너무 많은 리디렉션

  21. 21

    배치 파일을 호출하는 대신 리디렉션하면 배치 파일이 변수로 유지되지 않는 이유

  22. 22

    Angular 4, Router 4.0.0 : routerLink 또는 router.navigate는 프로그래밍 방식으로 하위 경로로 리디렉션되지 않습니다.

  23. 23

    도메인이 여러 예외와 일치하는 경우 htaccess 리디렉션

  24. 24

    JavaScript-양식의 텍스트 필드에서 기본값이 변경된 경우 강제 리디렉션

  25. 25

    JavaScript-양식의 텍스트 필드에서 기본값이 변경된 경우 강제 리디렉션

  26. 26

    페이지를 변경하지 않는 PHP 리디렉션

  27. 27

    하위 도메인이 지정되지 않은 경우 nodejs에서 HTTP-> HTTPS 리디렉션이 실패하는 이유는 무엇입니까?

  28. 28

    thank-you.html로 리디렉션되지 않는 양식 제출 후 경고 상자를 원합니다.

  29. 29

    Ubuntu 터미널에 디렉토리 이름이 표시되는 방식 변경

뜨겁다태그

보관