2017-04-05 4 views
1

Nachdem ich die Schaltfläche „Anmelden“ auf https://myapp.com/users/sign_in drücken, wird die folgende Fehlermeldung angezeigt:Devise in Rails funktioniert nicht mit HTTPs

ActionController::InvalidAuthenticityToken in Devise::SessionsController#create 

unabhängig von den Anmeldeinformationen des vorhandenen Benutzers.

Wenn ich die Taste zum Anmelden unter http://myapp.com/users/sign_in drücke, meldet sich der Benutzer an und die Anwendung scheint reibungslos zu funktionieren, außer dass der Benutzer keine Posts unter HTTPs erstellen kann.

Ich möchte Geräte Authentifizierung unter SSL machen.

routes.rb:

devise_for :users 

application_controller.rb:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
end 

user.rb:

class User < ApplicationRecord 
    devise :database_authenticatable, :recoverable, :rememberable, :registerable, :trackable, :validatable 
end 
  1. Ich habe die <%= csrf_meta_tags %> im Kopf
  2. Ich räumte die Cookies in den Browsern
  3. Ich versuchte protect_from_forgery with: :null_session statt protect_from_forgery with: :exception in app/controllers/application_controller.rb
  4. Ich versuchte <%= hidden_field_tag :authenticity_token, form_authenticity_token %> in der form_for für neue Sitzung zu setzen
  5. Ich versuchte devise_for :users, :controllers => { :sessions => "users/sessions" } in root
  6. ich habe versucht,

    config.to_prepare { Devise::SessionsController.force_ssl } 
    config.to_prepare { Devise::RegistrationsController.force_ssl } 
    config.to_prepare { Devise::PasswordsController.force_ssl } 
    

    in config/Umgebungen/production.rb

  7. hinzufügen
+0

Ihr Problem dadurch gelöst werden kann http://stackoverflow.com/questions/38331496/rails-5-actioncontrollerinvalidauthenticitytoken-error – bunty

+0

@bunty, na ja, nicht wahr –

+0

https://github.com/plataformatec/devise/wiki/How-To:-Use-SSL-(HTTPS) – bunty

Antwort

0

stellen eine Zeile in sessions_controller

skip_before_action :verify_authenticity_token 

und in routes.rb

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

, weil seine nicht authentication_token erfordern, wenn die Benutzeranmeldung

+1

Mayur, wo ist sessions_controller? –

+0

Ich werde versuchen, eine sessions_controller.rb in Controller/Benutzer/Sitzungen Ordner erstellen –

+0

Fehler: nicht initialisierte Konstante Benutzer :: SessionsController Es scheint, ich brauche mehr erweiterte Erklärungen von Ihnen. –

0

Es ist die Abhilfe CSRF Schutz der Sperrung für die Aktion sign_in in der Anwendungssteuerung

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    .... 
end 

Set als:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    skip_before_filter :verify_authenticity_token, if: -> { controller_name == 'sessions' && action_name == 'create' } 
    ... 
end 
Verwandte Themen