elixir - Redirection inside a plug in Phoenix framework -


i'm trying write plug authenticate users (checking session actually). have trouble getting redirect route. think because route generation happens after plug activated.

anyway got error this: undefined function testapp.page_path/2

in regular context page_path/2 exists , works.

defmodule testapp.plugs.authenticate   import plug.conn    def init(default), do: default    def call(conn, _)      user = plug.conn.get_session(conn, :current_user)     if not is_nil(user)       assign(conn, :user, user)     else       conn       |> phoenix.controller.put_flash(:warning, "user not authenticated.")       |> phoenix.controller.redirect(to: testapp.page_path(conn, :index))       |> halt     end   end  end 

router helpers included in controllers , view via web.ex file:

  def controller     quote       use phoenix.controller       ...       import myapp.router.helpers     end   end    def view     quote       use phoenix.view, root: "web/templates"       ...       import myapp.router.helpers       ...     end   end 

as can see, both controller , view functions import myapp.router.helpers module. helper (_path , url) functions defined.

you can either use qualified name:

phoenix.controller.redirect(to: testapprouter.helpers.page_path(conn, :index)) 

or can import route helpers , use page_path

import myapp.router.helpers # or import myapp.router.helpers, only: [page_path: 2] 

however, if use plug in pipeline in router, cause circular dependency , code not compile.


Comments