2016-01-24 14 views
7

私はPlugを書いて、ユーザーを認証します(実際にセッションを確認しています)。リダイレクトルートを取得できません。私はそれがこのプラグがアクティブになった後にルート生成が起こるためだと思う。 page_path/2は明らかに存在し、機能し、通常の状況ではundefined function TestApp.page_path/2Phoenixフレームワーク内のプラグ内部のリダイレクト

はとにかく私はこのようなエラーが発生しました。

defmodule TestApp.Plugs.Authenticate do 
    import Plug.Conn 

    def init(default), do: default 

    def call(conn, _) do 
    user = Plug.Conn.get_session(conn, :current_user) 
    if not is_nil(user) do 
     assign(conn, :user, user) 
    else 
     conn 
     |> Phoenix.Controller.put_flash(:warning, "User is not authenticated.") 
     |> Phoenix.Controller.redirect(to: TestApp.page_path(conn, :index)) 
     |> halt 
    end 
    end 

end 
+0

page_pathとは何ですか?それが関数なら、それを投稿することができます –

+0

それは 'get"/"、PageController、:index'を使ってルータ内で生成されます –

+1

これは機能しますか? Phoenix.Controller.redirect(TestApp.Router.Helpers.page_path(conn、:index、 "hello world")) –

答えて

7

ルータヘルパーがweb.exファイル経由でコントローラとビューに含まれています。あなたのよう

def controller do 
    quote do 
     use Phoenix.Controller 
     ... 
     import MyApp.Router.Helpers 
    end 
    end 

    def view do 
    quote do 
     use Phoenix.View, root: "web/templates" 
     ... 
     import MyApp.Router.Helpers 
     ... 
    end 
    end 

見ることができる、controllerviewの両方の機能は、MyApp.Router.Helpersモジュールをインポートします。これはあなたのヘルパー(_pathurl)関数が定義されている場所です。

あなたは完全修飾名を使用するか

Phoenix.Controller.redirect(to: TestAppRouter.Helpers.page_path(conn, :index)) 

をそれとも、ルートヘルパーをインポートして、その後、パイプラインの中でプラグインを使用している場合だけ、しかしpage_path

import MyApp.Router.Helpers 
# or 
import MyApp.Router.Helpers, only: [page_path: 2] 

を使用することができますあなたのルーターは循環依存を引き起こし、コードはコンパイルされません。

+0

ありがとうございました。サンデッシュ・ソーニはこれまでにこれについてコメントしましたが、私はまだ受け入れます、それは私が探していたものでした。ありがとう –

0

コントローラヘルパーを連れて来ましたか?

use TestApp.Web, :controller 

(私がコメントとしてではなく担当者を持っていないことを掲示します)

+0

私は、コントローラーのヘルパーが別のコントローラーの中にプラグを差し込むとコントローラーを壊すと思います。とにかくそれを試してもうまくいかなかった;) –

2

これは機能しますか? Phoenix.Controller.redirect(to: TestApp.Router.Helpers.page_path(conn, :index))

私はGazlerに有効なポイントがあると思います。インポートまたはフルパスのいずれかが可能です。

関連する問題