2012-02-12 16 views
2

2.2から3.2までの数年間にわたって移行されたレールアプリがあります。私はDeviseとOmniauthを使ってログインを行っていますが、残念ながら私は移行中に何かを混乱させてしまったと思います。Railsアプリはjavascriptで 'destroy_user_session_path'を見つけることができません

私はセットアップにしようとすると、セッションはapplication.html.erbに削除I次のエラーを取得する:

undefined local variable or method `destroy_user_session_path' for #<#<Class:0xb468e278>:0xb423e1dc> 

application.html.erb:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> 
    <title>Coffee Tracker</title> 
    <%= stylesheet_link_tag 'application'%> 
    <!--%= stylesheet_link_tag 'scaffold' %--> 
</head> 
<!--%= javascript_include_tag :defaults %--> 
<%= javascript_include_tag 'application' %> 
<%= csrf_meta_tag %> 
...snip... 
<% if user_signed_in? %> 
    <span id="currentuser"><%= current_user.email %></span> 
    <%= link_to('Logout', destroy_user_session_path, :method => 'delete') %> 
<% else %> 

は私も同じエラーが出ます

<%= link_to('Logout', destroy_user_session_path, :method => :delete) %> 

application.js

:私はラインをしようとすると、
// Place your application-specific JavaScript functions and classes here 
// This file is automatically included by javascript_include_tag :defaults 
//= require_self 
//= require_tree . 
//= require jquery 
//= require jquery_ujs 

レール3.2.0 ルビー1.8.7(2011-02-18パッチレベル334)[i686の-のLinux]

  • レール(3.2.0)
  • jqueryのレール(2.0.0 )
  • 工夫(2.0.0)
  • omniauth(1.0.2)
  • omniauth-Facebookの(1.2.0)
  • omniauth-のOAuth2(1.0.0)

アップデート:ここで がすくい路線です:あなたは次の2つのソリューションのいずれかをを持っている「破壊」

+0

あなたは 'routes.rb'fileへの変更を行う場合は、あなたが変更を確認するためにWebサーバを再起動する必要があります。 –

+2

あなたはレイクルートを行い、ユーザーセッションに関するセクションを投稿できますか? –

答えて

3

を取得し、私は、データベース認証可能工夫がありませんでしたルートを追加するモジュール。

アプリ/モデル/ user.rb:

devise :omniauthable, :database_authenticatable 

すくいルート:私はそれを確認する文書を発見した

 new_user_session GET /users/sign_in(.:format)    devise/sessions#new 
      user_session POST /users/sign_in(.:format)    devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)    devise/sessions#destroy 
user_omniauth_callback  /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook) 
      coffee_list GET /coffee/list(.:format)     coffee#list 
        root  /         menu#index 
           /:controller(/:action(/:id(.:format))) :controller#:action 

はdevise_forドキュメントにこれらのルートを作成する認証可能使用したモジュールを示しています。http://rubydoc.info/github/plataformatec/devise/master/ActionDispatch/Routing/Mapper#devise_for-instance_method

+1

は、(Omniauthメソッドとは対照的に)ローカルデータベースに対しても認証されていますか?私は同様の設定で作業していますが、database_authenticatableが追加するすべての機能は必要ありません(https://github.com/plataformatec/devise/blob/master/lib/devise/models/database_authenticatable.rb)。モデル。手動で経路を追加するほうが望ましいのだろうか? 削除 '/ users/auth/sign_out'、:to => 'users/sessions#destroy'、:as =>:destroy_user_session' – twelve17

+0

実際にはあります。私はそれらを最初にローカルにまたはomniauthを介してログインすることができました。 – Craig

1
user_session_path(current_user), :method => :delete 

は私の推薦です:

  1. D =>:LINK_TO
  2. に削除するか、または、devise.rbファイル内の行config.sign_out_viaを変更= :config.sign_out_viaに削除=
+0

destroy_user_session_pathがルートになっていますか?私の問題の一部は、どこに/どのようにそれが生成されるはずなのかわからないので、それを修正する場所をどこで確認するかわからないということです。 – Craig

2

の特定の名前付きルートを持っていない限り

user_omniauth_callback  /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook) 
      coffee_list GET /coffee/list(.:format)     coffee#list 
        root /         menu#index 
          /:controller(/:action(/:id(.:format))) :controller#:action 
+1

申し訳ありませんが、質問にタイプミスがありました。私は:method =>:deleteを試みましたが、それでも失敗しました。 – Craig

+0

devise.rbファイルにconfig.sign_out_via =:getを試しましたか? – mohamagdy

+0

はい、ルートを追加する認証可能なモデル(つまり、モデルではdatabase_authenticatable)を使用していなかったため、機能しませんでした。 – Craig

6

omniauthabledatabase_authenticatableなしで使用する場合は、手動でルートを追加する必要があります。

routes.rbで:

その後
devise_scope :user do 
    delete "https://stackoverflow.com/users/sign_out" => "devise/sessions#destroy" 
end 

あなたのビューで:

なぜこれを行う必要がありますか?ここホセValimの根拠を参照してください。

+0

お世話になった、ありがとう! – asiniy

+0

問題はありません:)他の誰かが私の闘いの恩恵を受けることができてうれしいです – monozok

関連する問題