我正在寫一個示例應用程序到鳳凰框架。 我authenticate.ex:插入鳳凰控制器
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 %>
和事實證明,在頁面的動作,我不要求身份驗證,我得到一個用戶未授權d,即使授權。我怎麼解決這個問題?
「我得到一個用戶沒有被授權」,你的意思是你得到了閃存和重定向,或者你得到了錯誤的菜單? – Dogbert
@Dogbert,我得到了錯誤的菜單 –
當你註銷時'@ conn.assigns [:current_user]'的值是多少?嘗試添加'<%= inspect @ conn.assigns [:current_user]%>'並查看輸出。 – Dogbert