Pergunta

Eu estou usando a versão atual do restful_authentication que é encontrada no github e eu estou tendo um monte de problemas sessão estranhos. O servidor parece estar de alguma forma atribuindo sessões para os usuários que não deveriam estar. Isso só acontece quando atravessam as desconectado / logado barreira.

Aqui está um exemplo. Sem sessões ativas no servidor, eu entro em uma conta com o usuário A. Em outra máquina, eu faça o login com o usuário B. Depois, ao sair de usuário B, em algum momento após o redirecionamento de logout acontece, eu vou estar logado como user A. a partir deste ponto, eu possa continuar a navegar no site como se eu tivesse logado como esse usuário! Algo que eu tenho observado através dos registros é que quando este sequestro acontece, os IDs de sessão não são os mesmos. O usuário A está conectado em ambas as sessões, mas os da sessão ID são completamente diferentes. Este é apenas um exemplo do que poderia acontecer. Eu não posso reproduzir o problema de forma confiável, pois é aparentemente aleatória.

Ele não parece ser um sintoma do ambiente ou o servidor que está sendo executado. Posso reproduzir o problema usando tanto mestiço e passageiro. Eu também vi isso no desenvolvimento e produção. Eu estou usando sessões baseadas em db neste aplicativo e ele está sendo executado no Rails 2.1.1. Eu apliquei a opção stateful ao chamar o gerador. Caso contrário, não outras modificações foram feitas para como as sessões são tratadas.

Atualização Aqui está o método de ofensa, que veio diretamente de restful_authentication.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
Foi útil?

Solução 2

Eu não sei se isso é tanto de uma resposta, pois é um em torno do trabalho. Tudo o que fiz foi passar a sessões baseadas em cookies e tudo está funcionando sem problemas.

Outras dicas

Isso pode acontecer se você (ou aqueles que escreveram restful_authentication) são cache o usuário atual em uma variável de classe. Eu vi um monte de artigos que defendem o uso de "User.current_user", mas desde que as classes são armazenados em cache nas solicitações, isso pode causar tainting sessão.

É este o local remoto? Você está entrando em-lo em dois computadores diferentes na mesma rede?

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