문제

로그인을위한 Snazzy 사용자 정의 경로가 있습니다

# routes.rb
map.login '/login', :controller => 'sessions', :action => 'new'

www.asite.com/login을 방문하십시오. 로그인이 실패한 사용자 정의와 마찬가지로, 우리는 우리의 행동에 대해 다음을 수행 할 것입니다. 로그인 실패에서 무슨 일이 일어나는지 주목하십시오.

 # sessions_controller.rb

 def create
   self.current_user = User.authenticate(params[:email], params[:password])
   if logged_in?
     # some work and redirect the user
   else
     flash.now[:warning] = "The email and/or password you entered is invalid."
     render :action => 'new'
   end
 end

이것은 매우 일반적입니다. 새로운 작업을 렌더링하고 로그인하라는 프롬프트를 다시 렌더링하십시오. 불행히도 당신은 또한 못생긴 URL과 함께 www.asite.com/session을 얻습니다. 멍청이! 원래 URL을 존중하기 위해 렌더링 할 수 있습니까?

올바른 솔루션이 없습니다

다른 팁

문제는 이것입니다 : 사용자는 먼저 방문합니다 /login 형식을 채 웁니다. 그들이 양식을 제출할 때, 그들은 게시합니다 /sessions, 그렇기 때문에 브라우저 URL이 변경됩니다. 이 문제를 해결하려면 두 가지를 수행 할 수 있습니다.

Michael이 언급했듯이 : New Action으로 다시 리디렉션하여 다른 사람을 변경할 수 있습니다.

 else
   flash[:warning] = "The email and/or password you entered is invalid."
   redirect_to login_path
 end

다음 요청에서 메시지를 사용할 수 있도록 플래시를 변경해야합니다 (리디렉션 다음).

두 번째 방법은 약간 쇠약하지만 언급 할 가치가 있습니다. 경로에서 조건을 사용하면 로그인 양식 (GET)과 양식 제출 (게시물)을 동일한 경로에 매핑 할 수 있습니다. 같은 것 :

map.login '/login',
  :controller => 'sessions', :action => 'new', 
  :conditions => {:method => :get}

map.login_submit '/login',
  :controller => 'sessions', :action => 'create', 
  :conditions => {:method => :post}

그런 다음 양식 조치가 로그인 제출 경로 인 경우 예상대로 일이 작동합니다.

변화 render :action => 'new' 에게 redirect_to login_path

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top