2011-01-10 15 views
2

私はレールアプリケーションに取り組んでおり、本に応じて簡単なログインシステムを追加しました。ルートは存在しますが、ログイン試行後に一致するルートはありませんか?

私は、コントローラの管理者を作成: レールはコントローラの管理ログインログアウトインデックス

を生成それは私がで問題がないhttp://localhost:3000/admin/loginに着くことができ

get "admin/login" 
    get "admin/logout" 
    get "admin/index" 
  1. をroutes.dbするには、以下のルートを追加しましたすべて。
  2. ログインしようとすると、「/ admin/login」に一致するルートはありません!

ここで最初の混乱する部分は、私のAdminControllerの「ログイン」メソッドがまったく実行されないことです。

二紛らわしい部分は、このコードは、魔法のように動作していることである - 管理者/ログイン/にすべてをリダイレクトします。

def authorize 
    unless User.find_by_id(session[:user_id]) 
     flash[:notice] = "you need to login" 
     redirect_to :controller => 'admin', :action => 'login' 
    end 
    end 

Sidenotes:

  • を、私は、サーバーを数回再起動します。
  • キャッシングの問題がないことを確認するために、別のブラウザを試しました。
+1

私はあなたがログインしようとしている時、これはPOSTリクエストではなく、GETだと思います。ログインフォームコードを表示する – fl00r

答えて

2

あなたはRailsと/または認証について学ぶためにログインシステムを作成している場合を除きさておき、あなたはおそらく優れているとして

(先頭を/注意)

match "/admin/login" => "admin#login" 
match "/admin/logout" => "admin#logout" 
match "/admin/index" => "admin#index" 

をお試しくださいDeviseのようなものを使ってオフにします。

+0

正しく覚えていれば、Railsのルートではスラッシュは重要ではありません。しかし、Deviseを使用するためのアドバイスがあります。 –

+0

オプションのスラッシュについては正しいと思います。しかし、 'get'を' match'で置き換えると、資格がPOSTされた場合を修正するはずです –

1

デビッドSulcの答えに続き:

あなたはあなたがあなたのアドレスバーにURLを入力するときに何が起こるか基本的にGET /admin/loginリクエストを行う必要があり、それらに行くことを意味し、get要求としてルートを定義していますまたはそれを使用するリンクに従います。

これらのURLをフォームで使用しようとすると、フォームにはPOSTリクエストがあり、これらのすべてをget-onlyリクエストと定義しているため、Railsは互換性のあるルートを見つけることができません。

私は、Deviseのような代替システムを見るべきであることは間違いありません。

関連する問題