2011-10-31 18 views
6

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 
+0

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 ... ' –

risposta

5

guardare e vedere se hanno copiato il ideare vista, essi possono non essere aggiornati.

ho avuto un simile issue ottenere ID utente dispari nel mio url, ideare non utilizza più user_confirmation_url a favore di confirmation_url (a partire da 1,0 ?, ma ancora lavorato un po 'più a lungo), per cui si potrebbe eliminare sia la vostra abitudine ideare viste o aggiorna l'helper dell'URL.

7

Qualcun altro mi ha segnalato nella giusta direzione, ma qui è la mia soluzione esatta. Il problema era nei modelli di view di sviluppo che avevo copiato da 1.2? Sembra che abbiano cambiato l'helper di collegamento da user_confirmation_url() a simply confirmation_url().

vecchia mail di conferma

<p>Welcome <%= @resource.email %>!</p> 

<p>You can confirm your account through the link below:</p> 

<p><%= link_to 'Confirm my account', user_confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p> 

nuovo modello conferma

<p>Welcome <%= @resource.email %>!</p> 

<p>You can confirm your account through the link below:</p> 

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p> 
1

Il codice disposizione testamentaria ultima è

<p><%= link_to 'Confirm my account', model_confirmation_url(:confirmation_token => @model.confirmation_token) %></p> 

versione
devise-2.1.2

0

per il mio caso, ho avuto visualizzazioni personalizzate sotto views/ideare esempio views/devise/confirmations/new.html.erb usando users_confirmation_url. Non ho più errori dopo che ho spostato quelli a sotto viste/utenti e ho usato confirm_url.

0

Per il mio caso (Rails 4.2 e idea 3.4.1)

fissa la vista generato (in app/views/escogitare/mailer/confirmation_instructions.html.erb) necessario rimuovere il @Resource nella user_confirmation_url a poco:

@token)%>

Problemi correlati