我正在将Guardian从v0.14
更新为v1.0
。
我正在关注官方监护人github页面的更新指南,我遇到了一个问题。
为了更新,我稍微改变了我的身份验证逻辑。
自:
case Myapp.Session.authenticate(session_params) do
{:ok, user} ->
{:ok, jwt, _full_claims} = user |> Guardian.encode_and_sign(:token)
conn
|> put_status(:created)
|> render("show.json", jwt: jwt, user: user)
:error ->
conn
|> put_status(:unprocessable_entity)
|> render("error.json")
end
要:
case Myapp.Session.authenticate(session_params) do
{:ok, user} ->
{:ok, jwt, _full_claims} = Core.Guardian.encode_and_sign(user)
conn
|> put_status(:created)
|> render("show.json", jwt: jwt, user: user)
:error ->
conn
|> put_status(:unprocessable_entity)
|> render("error.json")
end
我从nil
获得Guardian.Plug.current_resource(conn)
...为了解决此问题,我将token
存储在前端localStorage
并传递给用户信息。
但我仍然认为从current_resource
获取用户信息是更好的做法。我怎样才能做到这一点?
- 编辑
current_user_controller.ex
def show(conn, _) do
user = Myapp.Guardian.Plug.current_resource(conn)
conn
|> put_status(:ok)
|> render("show.json", user: user)
end