0

次のスキームに従う Rails アプリケーションを作成する方法がわかりません。

このサイトは主に、1 つまたは 2 つの保護されていない「静的」ページと「/」から直接提供されるログイン ページに加えて、ユーザーの認証を必要とする「保護された」内部パスで構成されています ( root_path)。

一般的に、ユーザーは にアクセスしてログインするフローに従い、root_path認証されていないときに保護されたページにアクセスしようとすると、 に戻されroot_pathます。ユーザーが のフォームにログインすると、root_pathに送信されますhome_path(他のページの保護を介して送信された場合でも、root_pathつまり、スマート転送はありません。後で追加する可能性があります。)

さらに、認証済みの状態で を参照しようとするとroot_path、要求がすぐに に転送されhome_pathます。home_pathのページには、ログアウトするためのリンクが含まれます。その結果、ユーザーはすぐに に移動しますroot_path

私の質問:

これを設定するには、routes.rb エントリはどのようになりますか? Usersコントローラーとコントローラーがあり、コマンドライン認証 (irb コンソール経由) が既に機能していると仮定Sessionsすると、このシステムを機能させるルートとコントローラー メソッドの正しい組み合わせは何ですか? 私は非常に混乱しています!


それが役立つ場合、ここに私がこれまでに持っているものがありますが、これを動作状態にしてテストすることさえできないほど迷っています。

次のようなルートファイルがあります。

MyAppRails::Application.routes.draw do
  resources :sessions, only: [:new, :create, :destroy]

  root to: "sessions#new"
  match '/signout', to: 'sessions#destroy', via: :delete
  match "/home" => 'users#home'
end

UsersController にはhomeメソッドのみがあり、SessionsController にはnew、、、createおよびdestroyメソッドがあります。

サインイン フォームをどこに送信すればよいかわからないという点で特に行き詰まっていますsessions#new。何らかの形で指定する必要があると思いますが、それがどのように機能するのかがよくわかりません。

ありがとう。

4

1 に答える 1

1

before_filterログインしているユーザーへのアクセスを制限する各コントローラーに を配置する必要があるため、ルートを変更する必要はありません。ユーザーがログインしているかどうかを確認する:login_requiredメソッドを呼び出すことができます。ログインしていない場合は、ユーザーを公開ページにリダイレクトします。

通常、ルートは別のコントローラー、site_controller、または同様のものとして保持します。また、ログイン パスsessions#newを作成し、メソッドを使用して、ログインbefore_filterしていないゲストのリダイレクトを管理します。

このスレッドはあなたを助けるかもしれません。

于 2012-06-12T21:19:13.257 に答える