2017-10-21 2 views
0

Ich versuche aus den letzten 7 Stunden, um den Benutzer nach E-Mail-Bestätigung automatisch anmelden, aber wenn ich den Bestätigungslink klicken, dann heißt es "Ihre E-Mail-Adresse wurde erfolgreich bestätigt." aber nicht den Benutzer anmelden. Ich habe diesen Code in meine Bestätigungen Controller und Route geschriebenWie sign_in Benutzer nach Devise E-Mail-Bestätigung in Rails

devise_for :users, controllers: {confirmations: 'users/confirmations'} 

class ConfirmationsController < Devise::ConfirmationsController 
    #private 
    def after_confirmation_path_for(resource_name, resource) 
    sign_in(resource) 
    render plain: "here" 
    redirect_to "/admins/view_account", notice: "User deleted." 
    end 
end 

Jede Hilfe wäre sehr dankbar Vielen Dank.

+0

ist Warum haben Sie schlicht machen: "hier"? – gates

+0

@gates ja es geht in bestätigungen controller – john

+0

@gates ??? was ist dein Vorschlag? – john

Antwort

1

Beachten Sie, dass die automatische Anmeldung nach der E-Mail-Bestätigung das Standardverhalten von Devise war und dann aufgrund von Sicherheitsmaßnahmen geändert wurde (nach), wie Sie mehr sehen können here und here.

Wenn Sie wollen immer noch, es zu tun, auf der Version der Devise je sicherstellen, dass die Linie unten auf der config/initializers/devise.rb Datei in Ihrem Projekt setzen:

config.allow_insecure_sign_in_after_confirmation=true 

Wenn Sie aktuelle Devise Version verwenden, müssen Sie unter Umständen um statt dem, erweitern die Standard-Controller mit diesem Code auf app/controllers/users/confirmations_controller.rb als Ersatz das, was Sie oben für Controller-Code erwähnt haben (dagegen bitte die Namespaces und Pfad erwähnt):

class Users::ConfirmationsController < Devise::ConfirmationsController 
    def show 
    super do |resource| 
     sign_in(resource) if resource.errors.empty? 
    end 
    end 
end 

Und der Code, den Sie am Anfang der Frage eingefügt stellen Sie sicher, gehört in config/routes.rb:

devise_for :users, controllers: { confirmations: 'users/confirmations' } 

Hoffe, es hilft!

0

Ich habe es selbst gelöst.

Wege sollten so sein

devise_for :users, controllers: {confirmations: 'confirmations'} do 
    #put "confirm_user", to: "confirmations#confirm_user" 
    get "confirmation", to: "confirmations#after_confirmation_path_for" 
    end 

-Controller wie diese

class ConfirmationsController < Devise::ConfirmationsController 
    #private 
    def after_confirmation_path_for(resource_name, resource) 
    sign_in(resource) 
    #render plain: "here" 
    #redirect_to "/admins/" 
    end 

    def show 
    self.resource = resource_class.confirm_by_token(params[:confirmation_token]) 

    if resource.errors.empty? 
     set_flash_message(:notice, :confirmed) if is_flashing_format? 
     sign_in(resource) # <= THIS LINE ADDED 
     redirect_to "/your path/" 
    else 
     respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render :new } 
    end 
    end 


end 
Verwandte Themen