Recentemente ho aggiornato da Devise 1.2 a 1.4.9 e tutto sembra funzionare tranne il mio modulo confermabile. L'email funziona così come l'intero processo. Ma la pagina di conferma è sempre vuota. Funziona e conferma l'account di posta elettronica, ma non reindirizza l'utente e genera un errore 406. Fa lo stesso per i tentativi di conferma falsi.convalidato che non funzioni nella versione più recente
Gli itinerari sembrano funzionare correttamente, ho specificato nel mio modello utente e nulla è cambiato.
Qualche idea? Mi mancano alcune impostazioni o qualcosa che devo aggiornare per 1.4.9?
UPDATE
sembra essere un problema con l'URL viene generato. Per qualche motivo sconosciuto è in fase di preparazione l'URL di conferma con il nome utente? e questo sta causando la sua rottura. Ma non sono ancora sicuro di come aggiustarlo.
http://localhost:5000/users/confirmation.someusername?confirmation_token=R7apAPhC5c3rszvhsowp
Il nome utente nell'URL sopra fa sì che il processo di non lavorare.
Ho controllato il diff tra il controller in 1.2 (che funziona) e la nuova versione.
1,2
# GET /resource/confirmation?confirmation_token=abcdef
def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
if resource.errors.empty?
set_flash_message :notice, :confirmed
sign_in_and_redirect(resource_name, resource)
else
render_with_scope :new
end
end
1.4.9
# GET /resource/confirmation?confirmation_token=abcdef
def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
if resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_navigational_format?
sign_in(resource_name, resource)
respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
else
respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render_with_scope :new }
end
end
protected
# The path used after resending confirmation instructions.
def after_resending_confirmation_instructions_path_for(resource_name)
new_session_path(resource_name)
end
# The path used after confirmation.
def after_confirmation_path_for(resource_name, resource)
after_sign_in_path_for(resource)
end
errore
Started GET "https://stackoverflow.com/users/confirmation.sdfsdfsd?confirmation_token=vmxmx73xvM7sUfcvH9CX" for 127.0.0.1 at 2011-10-31 13:30:33 +0100
Processing by Devise::ConfirmationsController#show as
Parameters: {"confirmation_token"=>"vmxmx73xvM7sUfcvH9CX"}
SQL (1.1ms) SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"users"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'vmxmx73xvM7sUfcvH9CX' LIMIT 1
SQL (0.7ms) SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"users"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
Completed 406 Not Acceptable in 28ms
essa è ovvio che url sta causando 406 /users/confirmation.someusername? ... ".someusername" (include il punto) sarà trattato come il formato di risposta che vuoi tornare. Quindi forse se provi la regola del percorso di prepand nel tuo file route.rb potresti risolvere questo 'get /users/confirmation.:username",: controller =>: users,: action => confirmation ... ' –