current_user retorna TrueClass em vez de um usuário em um controlador usando o Devise
-
27-09-2019 - |
Pergunta
Estou usando o Devise 1.0.8 em um projeto Rails 2.3.8. No meu teste de controlador, eu tenho:
context "when current_user is admin" do
should "render" do
sign_in Factory(:admin)
get :index
assert_response :success
end
end
E no próprio controlador, há o seguinte antes_filter:
def redirect_if_not_admin
puts current_user
redirect_to root_path unless current_user.try(:admin?)
end
Esta é a saída do meu teste:
true
false
NoMethodError: undefined method `admin?' for true:TrueClass
Portanto, current_user é verdadeiro quando eu uso o SIGN_IN no teste. No entanto, quando eu não, o current_user é nulo, então está definitivamente sendo afetado. Agradecemos antecipadamente por qualquer ajuda.
Solução
Eu usei a confirmação! Método no recurso em um After_Create/Build em vez de definir os atributos na fábrica e isso fez o truque. current_user é igual a verdade quando há um usuário não confirmado no site (alguém que se inscreveu, mas ainda não clica no link de confirmação enviado a eles).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow