私はPhoenixフレームワークにサンプルアプリケーションを書いています。 私authenticate.ex:私は、単一のアクションの認証を必要としないで、コントローラがあるphoenixコントローラのプラグ
defmodule Myapp.Plug.Authenticate do
import Plug.Conn
import Myapp.Router.Helpers
import Phoenix.Controller
def init(default), do: default
def call(conn, default) do
current_user = get_session(conn, :current_user)
if current_user do
assign(conn, :current_user, current_user)
else
conn
|> put_flash(:error, 'You need to be signed in to view this page')
|> redirect(to: session_path(conn, :new))
end
end
end
:
defmodule Myapp.SharedLinkController do
use Myapp.Web, :controller
alias Myapp.SharedLink
plug Myapp.Plug.Authenticate when action in [:new, :create]
...
end
それは動作しますが、問題はメニュー表示が依存があるということです
<%= if Map.has_key?(@conn.assigns, :current_user) do %>
<li>first</li>
<% else %>
<li>second</li>
<% end %>
、それは私が認証を必要としないページアクション、上、私は、ユーザーが認可されていないことを得ることが判明:ユーザーが許可されているかどうかにそれが許可されていても。どうすればこの問題を解決できますか?
「ユーザーが承認されていないことが判明しました」というのは、フラッシュを取得してリダイレクトする、または間違ったメニューを表示するということですか? – Dogbert
@Dogbert、間違ったメニューが表示される –
ログアウトしたときに '@ conn.assigns [:current_user]'の値は何ですか? '<%= inspect @ conn.assigns [:current_user]%>'を追加し、出力を見てください。 – Dogbert