2014-12-03 6 views
5

Meine Rails 4 Applikation hat ein User und Admin Model.Destroy admin session resultierend in HTTP get request rails 4

Ich habe für das Admin-Modell, das über Rails_admin gem erstellt wurde, implementiert. Das Problem tritt auf, wenn ich mich abmelden möchte: Die App leitet eine unerwartete Seite weiter, und Protokolle zeigen, dass GET-Anfragen statt DELETE-Anfragen gemacht werden.

Nach Forschung Ich habe dafür gesorgt, dass der Logout-Link die Löschmethode hat angegeben, wie unten

  • <% = link_to "Admin-Logout", destroy_admin_session_path,: method =>: delete%>
  • in devise.rb das Zeichen aus über Lösch config.sign_out_via = angegeben: löschen

    die Routen sind wie folgt

    Mvc::Application.routes.draw do 
        resources :users 
        devise_for :admins 
        mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 
    root "users#index" 
    end 
    

    Ich kann mich ohne Probleme anmelden, aber wenn die Abmeldungsanforderung im Browser in/admins/sign_out gerendert wird, ist die Sitzung noch aktiv und die Seite zeigt immer noch das Admin-Dashboard an. Interessanterweise ist die Flash-Mitteilung zeigt ‚Model‚S‘konnte nicht gefunden werden‘ und ich bin wirklich von dem, was die Protokolle verwirrt zeigt

    Started GET "/admins/sign_out" for 127.0.0.1 at 2014-12-03 23:10:50 +0000 
    Processing by RailsAdmin::MainController#show as HTML 
    Parameters: {"model_name"=>"s", "id"=>"sign_out"} 
    [RailsAdmin] Could not load model S, assuming model is non existing. (uninitialized constant S) 
    
    
    Gemfile 
    source 'https://rubygems.org' 
    
    gem 'rails', '4.0.3' 
    gem 'sqlite3' 
    gem 'bootstrap-sass', '~> 3.3.1' 
    gem 'uglifier', '>= 1.3.0' 
    gem 'jquery-rails' 
    gem 'turbolinks' 
    gem 'jbuilder', '~> 1.2' 
    gem 'simple_form' 
    gem 'bcrypt-ruby' 
    gem 'devise' 
    gem 'rails_admin' 
    
    
    group :assets do 
    gem 'sass-rails', '~> 4.0.0' 
    gem 'coffee-rails', '~> 4.0.0' 
    gem 'uglifier', '>= 1.3.0' 
    
    end 
    
    group :doc do 
    
    gem 'sdoc', require: false 
    end 
    
    group :development do 
    gem 'better_errors', '~> 2.0.0' 
    end 
    

    Was würde Ich mag ist, zu erreichen, dass, wenn die Abmeldung ausgeführt wird, der Admin-Sitzung zerstört und der Admin wird zum root_path umgeleitet. Ich stelle fest, dass ich derzeit nur die Anwendung und den Benutzer-Controller und keinen Session-Controller habe. Von dem, was ich verstehe, sollte die Geräte-Engine Session-Management aus der Box bringen. Irgendwelche Vorschläge, bitte?

    +0

    Den hinzuzufügen: method =>: delete Funktionalität von jquery_ujs kommt. Ist das in Ihrem Projekt vorhanden? Möglicherweise müssen Sie // = jquery_ujs zu Ihrer application.js-Datei hinzufügen. –

    +2

    RailsAdmin entführt Ihre Route von Devise, und weil es '/ admins/sign_out' nicht erkennt, interpretiert es es als'/admins /: id ', Routing zu der Show-Methode und versuchen, ein Modell mit einer ID von" sign_out "zu entsprechen. Sie müssen einen Weg finden, RailsAdmin und Devise zu entwirren, damit die Routen so funktionieren, wie Sie es brauchen. – Joseph

    +0

    Danke Joseph, das macht Sinn, ich werde weiter in diese Richtung graben. – user2313058

    Antwort

    -1

    Es scheint, dass Sie nicht die Anwendung Layout-Datei verwenden. So versuchen, den folgenden Code-Snippet auf die HTML-Datei

    <head> 
     
        <title>Training</title> 
     
        <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
     
        <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
     
        <%= csrf_meta_tags %> 
     
    </head>