usuarios tutorial rails name fields custom con autenticacion ruby-on-rails-3 devise devise-confirmable

ruby on rails 3 - tutorial - ¿Por qué no permite Devise que los usuarios no confirmados inicien sesión incluso cuando se establece allow_unconfirmed_access_for?



ruby on rails devise tutorial (3)

Tenemos una base de usuarios existente y estamos agregando confirmación por correo electrónico. La confirmación es opcional, pero permitirá funciones adicionales. Los usuarios no están obligados a confirmar. Agregué el módulo confirmable y realicé migraciones. La confirmación funciona como se anuncia.

Sin embargo, los usuarios no pueden iniciar sesión ya que no están confirmados. Todos los usuarios actuales tienen valores de confirmación nulos, que es lo que queremos (los usuarios pueden regresar y confirmar su correo electrónico en cualquier momento). Seguí todos los artículos wiki de Devise y establecí allow_unconfirmed_access_for en el inicializador:

config.allow_unconfirmed_access_for = 10.years

También intenté configurarlo en nuestro modelo de usuario:

devise :confirmable, allow_unconfirmed_access_for: 10.years

También intenté usar otros valores (1.oy 500. días, etc.)

Mi SessionsController, que no difiere mucho del método de Devise ( aquí en github )

class Users::SessionsController < Devise::SessionsController respond_to :json def new redirect_to "/#login" end def create resource = warden.authenticate(auth_options) if !resource render json: {error: "Invalid email or password" }, status: 401 and return end sign_in(resource_name, resource) render "sign_in", formats: [:json], locals: { object: resource } end end

La respuesta de Devise:

{"error": "Debe confirmar su cuenta antes de continuar".}

Diseñar 2.1.2 con Rails 3.2.9.


El equipo de Devise ha lanzado una versión (2.2.4) que admite nil como un valor válido para allow_unconfirmed_access_for , lo que significa que no hay límite. Problema: https://github.com/plataformatec/devise/issues/2275

Ahora puede hacer:

config.allow_unconfirmed_access_for = nil


Simplemente necesitaba hacer esto en mi modelo de Usuario, en lugar de usar allow_unconfirmed_access_for:

protected def confirmation_required? false end


Tengo el mismo problema: después de activar las confirmaciones de diseño, las cuentas creadas previamente no pueden iniciar sesión.

El motivo está aquí:

def confirmation_period_valid? self.class.allow_unconfirmed_access_for.nil? || (confirmation_sent_at && confirmation_sent_at.utc >= self.class.allow_unconfirmed_access_for.ago) end

Las cuentas antiguas tienen confirmation_sent_at establecido en cero, es por eso que no pueden iniciar sesión.

Una solución es forzar confirmation_sent_at así:

update users set confirmation_sent_at=created_at where confirmation_sent_at is NULL;

Puede hacerlo manualmente o crear una migración.