Pergunta

Então, eu tenho uma rota personalizada snazzy para login

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

Visite www.asite.com/login e você está lá. Como é costume com login falhou, no entanto, vamos fazer o seguinte na nossa acção. Nota que acontece no login falhou.

 # 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

Isso é muito típico. Simplesmente tornar a nova ação e pronta para login novamente. Infelizmente você começa também com ele uma URL feio: www.asite.com/session. Ick! É possível obter tornando a respeitar a URL original?

Nenhuma solução correta

Outras dicas

O problema é este: o usuário primeiras visitas /login e preenche o formulário. Quando enviar o formulário, eles POST para /sessions, razão pela qual as mudanças de URL do navegador. Para contornar este problema, você pode fazer duas coisas:

Como Michael mencionado, você pode redirecionar de volta ao: nova ação, mudando a mais para:

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

Note que você vai precisar para mudar o flash para que a mensagem está disponível no próximo pedido (seguindo o redirecionamento).

O segundo método é ligeiramente hackier, mas talvez vale a pena mencionar. Usando condições nas suas rotas, você pode mapear tanto o formulário de login (que é um GET) eo formulário de envio (que é um POST) para o mesmo caminho. Algo como:

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

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

Então, se a sua ação de formulário é de login submeter caminho, as coisas devem funcionar como esperado.

Alterar render :action => 'new' para redirect_to login_path

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top