2016-08-05 4 views
1

Ich habe ein Problem mit dem Device Reset Passwort Link (Rails 4). Es wird korrekt gesendet, aber wenn der Benutzer auf den Link klickt, werden sie zur Startseite weitergeleitet.Devise Reset Password Link Umleitung auf Homepage nur in Produktion

Diese nur passiert in der Produktion. Es funktioniert perfekt in der Entwicklung.

Wenn die Verbindung es sendete, sie in der richtigen Form, zB:

http://website.com/d/users/password/edit?reset_password_token=gmf7ssHx4QRmUBdGb1nr 

Lauf Rake Routen, alles mir sagt, es die PasswordsController in devise zeigen soll:

new_user_password GET   /d/users/password/new(.:format)                passwords#new 
edit_user_password GET   /d/users/password/edit(.:format)               passwords#edit 
        PATCH   /d/users/password(.:format)                 passwords#update 
        PUT   /d/users/password(.:format)                 passwords#update 

I Abbildung muss es eine Umleitung in der PasswordsController von Devise sein. Es gibt nur zwei Stellen in der Editiermethode, in der eine Umleitung stattfinden würde: require_no_authentication und assert_reset_token_passed. Also überschreibe ich die Edit-Methoden mit einigen Puts und überprüfe die Logs.

class PasswordsController < Devise::PasswordsController 


    def require_no_authentication 
    assert_is_devise_resource! 
    return unless is_navigational_format? 
    no_input = devise_mapping.no_input_strategies 

    authenticated = if no_input.present? 
     args = no_input.dup.push scope: resource_name 
     warden.authenticate?(*args) 
    else 
     warden.authenticated?(resource_name) 
    end 

    if authenticated && resource = warden.user(resource_name) 
     flash[:alert] = I18n.t("devise.failure.already_authenticated") 
     puts "==========================" 
     puts "APPARENTLY IM ALREADY AUTHENTICATED WTF?" 
     puts "==========================" 
     redirect_to after_sign_in_path_for(resource) 
    end 
    end 

    protected 
    # Check if a reset_password_token is provided in the request 
    def assert_reset_token_passed 

     if params[:reset_password_token].blank? 
     puts "reset_password_token is blank!!!" 
     set_flash_message(:alert, :no_token) 
     redirect_to new_session_path(resource_name) 
     else 
     puts "reset password token NOT blank" 
     end 

    end 
end 

Ergebnisse in der Entwicklung: beide Put-Anweisungen erscheinen wie erwartet.

Ergebnisse in der Produktion: NO puts Aussagen zeigen sich überall. In der Tat, wenn ich die Live-Protokolle überprüfen und zum Zurücksetzen des Passworts Link gehen, zeigt es, dass es direkt auf die Homepage wird:

2016-08-05T23:00:15.166276+00:00 app[web.1]: Started GET "/" for 177.227.42.66 at 2016-08-05 23:00:15 +0000 
2016-08-05T23:00:15.168243+00:00 app[web.1]: Processing by PageController#index as HTML 

ich auf diesen einen ratlos bin. Wie zeigen die Protokolle ENTWEDER der Methoden, die aufgerufen werden? Ich habe bestätigt, dass die Bereitstellung ordnungsgemäß funktioniert und den heroku-Server neu gestartet.

Danke!

+0

Ändern der Protokollebene in production.rb falls noch nicht geschehen, 'config.log_level =: debug'. – sahil

+0

Bereits geändert:/ – CHawk

+2

Haben Sie eine DNS-Umleitung passiert? Zum Beispiel, leitet Sie etwas von website.com/d/users/ ... auf www.website.com ohne den Pfad? – rdubya

Antwort

1

Sie haben eine Weiterleitung, bevor die Anforderung Ihren Server erreicht, der den Pfad löscht. Zum Beispiel wird example.com/aboutus ohne das '/ aboutus' auf www.example.com umgeleitet.

(Umbau meines Kommentars oben auf eine Antwort)

Verwandte Themen