2014-10-22 2 views
1

Rails 4 앱에 대해 상당히 바닐라 등록 시스템을 보유하고 있으며, 이상한 기능을 추가하고 싶습니다. 여러 개의 등록 양식을 제공하고 데이터가 제출되는 페이지를 기반으로 새 User 개체에 대한 값을 비밀리에 설정하고 싶습니다.동일한 사용자 모델에 대해 여러 등록 페이지를 구분하십시오.

보안상의 이유로 현재 수행하는 방식이 좋지 않습니다. 그것은 잘 작동하지만, 정통한 사용자가 브라우저의 dev 도구를 사용하여 숨겨진 필드의 값을 변경하고 그들이 다른 페이지에서 온 것을 나타낼 수 있습니다.

routes.rb

get '/signup', to: 'users#new' 
get '/red-signup', to: 'users#new', color: 'red' 
get '/blue-signup', to: 'users#new', color: 'blue' 

users_controller.rb

def new 
    @user = User.new 
    @color = params[:color] || 'grey' # default of grey 
end 

사용자/new.html.erb

<%= form_for(@user) do |f| %> 
    ... 
    <%= f.hidden_field :color, value: @color %> # VULNERABLE TO TAMPERING 
    <%= f.submit "Create my account" %> 
<% end %> 
S

o, 나는 다른 페이지에서 온 새로운 등록을 구별하는 변조 방지 방법을 원합니다. 나는 폼 데이터에서 어떤 토큰을 유지한다는 것을 의미한다고 가정합니다.

탐색 방법에 대한 제안 사항이 있으십니까?

+0

각 색상마다 별도의 페이지와 경로가 있습니까? 그렇다면'request.fullpath'의 값을 검사하여 컨트롤러의 URL을 기반으로 결정을 내리지 않는 이유는 무엇입니까? – Alireza

+0

기본값을 사용하는 것은 어떨까요? http://guides.rubyonrails.org/v2.3.11/routing.html#defining-defaults, 컨트롤러에서 처리 할 수 ​​있기 때문에 도움이 될 것 같아요. 그것이 실제로 도움이되는지 알려주세요, 나는 결코 사용하지 않으므로 호기심이 생깁니다. 그래서 당신의 경우 :'''get/blue-signup ','users # new ', defaults : {color :'blue '}''' –

+0

알리 : 최고 일 것입니다. – hoverbikes

답변

0

@color 값을 newcreate 동작 사이에 안전하게 전달하려는 경우이 용도로 세션을 사용할 수 있습니다. 당신의 new 작업을 내부 사용자가 색상을 설정 :

def new 
    @user = User.new 
    session[:color] = params[:color] || 'grey' # default of grey 
end 

그런 다음 create 행동에 당신은 그것을 검색 할 수 있습니다

def create 
    @color = session[:color] 
end 

레일 세션 데이터는 기본적으로 쿠키에 저장되고 암호화가 변조하기 위해 서명 -증명. 또한 암호화되어있어 누구나 액세스 할 수있는 사람은 내용을 읽을 수 없습니다.

0

최종 목적은 무엇입니까?

어떤 등록 양식의 전환율이 더 좋은지 알고 싶다면 휠을 다시 발명해야하며 올바른 작업을 위해 A/B testingthose gems을 살펴 봐야합니다.

+0

아마도 여러분이 모으 셨을 것입니다. 색상 문제는 질문을 명확하게하는 추상화 일뿐입니다. 그러나 A/B 테스트가 아닙니다. 실제 사용은 화이트 라벨링 사유로, 우리가 작업하는 다양한 회사가 직원들에게 브랜드 등록 페이지를 제공하고 사용자를 고용주와 연관시킬 수있게합니다. – hoverbikes

+0

"직원을위한 브랜드 등록 페이지 제공"다른 등록 페이지의 의미는 무엇입니까? 페이지의 스타일을 수정하고 싶습니까 (예 : 다른 배경색, 다른 글꼴 등), 다른 필드를 원하십니까 (예 : 이메일 요청, 다른 사용자 이름 요청, 다른 하나는 주소)? –

관련 문제