Domanda

Sto lavorando su un abbastanza tradizionale dimenticato la password e-mail - voglio e-mail all'utente un token di modifica della password inserite in un link che è possibile fare clic su al fine di modificare la propria password. Sto email tramite l'ActionMailer tradizionale.

Se io uso un tag link_to normale

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>

ho un parente di collegamento -. Piuttosto inutile, da una e-mail

Se aggiungo in

:only_path => false, allora gli errori dicendo che ho bisogno di impostare default_url_options[:host]. La documentazione ActionController implicano che hai fatto sovrascrivendo i metodi #default_url_options nel controller. Sicuramente c'è un opzione di configurazione per dire Rails quello che è hostname è senza aggiungere il mio file di configurazione, analizzarlo, etc?

È stato utile?

Soluzione

default_url_options è disponibile da config.action_mailer e deve essere impostato nel file di configurazione del proprio ambiente.

Per esempio, in config/environments/production.rb:

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}

Per il test locale, modificare config/environments/development.rb:

config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}

Poi, a patto di avere un percorso di nome chiamato forgot_password_login, è possibile generare il link URL login nel vostro programma di posta utilizzando qualcosa di simile:

forgot_password_login_url(:token => 'a7s8q15sk2...')

Altri suggerimenti

Probabilmente si desidera impostare:. Protocollo => 'https' così, tra

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
}

C'è un'altra alternativa, come descritto in http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/

Questa soluzione ha il vantaggio che non richiede alcuna configurazione (quindi meno di una seccatura), e funziona bene fino a quando si inviano messaggi di posta elettronica all'interno di controllori.

Ma se si ha intenzione di inviare e-mail senza passare attraverso un controller (per esempio da riga di comando o in risposta ad un altro e-mail), è necessario la configurazione statica.

default_url_options Impostazione direttamente è deprecato in Rails 3.1. Utilizzare url_for .

Aggiungi parametro :protocol per ignorare il valore di default (http), :protocol => 'https://'. Questo creerà url che comincia con "https: // ..." al posto di predefinito "http: //"

È interessante notare, ho avuto lo stesso problema come avete fatto, ma nel test di unità (seguendo railstutorial di Michael Hartl). Ho avuto questa linea nel mio file test.rb, ma che non ha aiutato:

config.action_mailer.default_url_options = { host: 'example.com', protocol: 'http' }

Ho anche aggiunto un'altra linea come questo per test.rb, e sorprendentemente questo risolto il problema

default_url_options = { host: 'example.com', protocol: 'http' }

Impostazione default_url_options direttamente è deprecato in Rails 3.1

Utilizzare l'helper url_for per crearlo:

<%= link_to "click here", url_for(:controller => foo, :action => 'bar', :token => token, :host => 'www.yourdomain.com') %>

Si può solo fare

<%="click here", :controller => foo, :action => 'bar', :token => token, :host=>request.host -%>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top