Phoenixを使って同じルート "/"に2つのページをどのように実装できるのでしょうか? 1つは認証されていないユーザー用、もう1つは認証ユーザー用です。これが起こるユースケースの例は、ログインページがログインした後のログインページが「/」に、アプリケーションが「/」にログインしたLinkedInとFacebookです。2つのルートページ。認証されていないユーザのためのもの、認証されたユーザのためのもの
私はGuardianを認証に使用しています。以下のように:FrontControllerが認証されていないユーザー(例えば、ログイン・ページ)からアクセス可能なページを提供し、ApplicationControllerには、実際のアプリケーションを提供しています
pipeline :auth do
plug Guardian.Plug.EnsureAuthenticated, handler: App.AuthHandler
end
pipeline :unauth do
plug Guardian.Plug.EnsureNotAuthenticated, handler: App.AuthHandler
end
scope "/", App.Web do
pipe_through [:browser, :unauth]
get "/", FrontController, :index
end
scope "/", App.Web do
pipe_through [:browser, :auth]
get "/page", ApplicationController, :index
end
。
ApplicationControllerが "/ page"の代わりに "/"を提供する場合、 "1行目の前の節は常に一致するため、この節は一致しません"というエラーがスローされます。
私はif文と両方のページを扱う1つのコントローラを使用すると思いますが、残念ながらこのような戦略を実装する方法に関するドキュメントは見つかりませんでした。
私はこれがフェニックスのルータで実行できるとは思わない。新しいコントローラへのルートを指し示すことができ、それからユーザがログインしている場合は 'ApplicationController.index'を、それ以外の場合は' FrontController.index'を呼び出します。 – Dogbert
@Dogbertまたは 'FrontController.index'の中から' ApplicationController.index'に委譲します。 – mudasobwa