Ege*_*soz 6 elixir phoenix-framework
我有一个使用Guardian进行 JWT身份验证的应用程序.当用户登录时,响应包含正文中的jwt.然后,前端(即SPA)将jwt存储在localStorage中,并将其附加到Authorization
从那里发送的每个请求的头部.然后,服务器使用Guardian的内置验证插件验证:
pipeline :api do
plug :accepts, ["json"]
plug Guardian.Plug.VerifyHeader, realm: "Bearer"
end
Run Code Online (Sandbox Code Playgroud)
我想改变它,以便不是将JWT存储在localStorage(不安全)中,而是将服务器作为安全cookie(带Secure
和HttpOnly
设置)发送到前端.然后我希望Guardian从cookie中读取jwt,而不是从Authorization
头部读取.
Guardian是否支持此功能?
这是我的SessionController create
函数:
def create(conn, params) do
case authenticate(params) do
{:ok, user} ->
new_conn = Guardian.Plug.api_sign_in(conn, user, :access)
jwt = Guardian.Plug.current_token(new_conn)
new_conn
|> put_status(:created)
|> render("show.json", user: user, jwt: jwt)
:error ->
conn
|> put_status(:unauthorized)
|> render("error.json")
end
end
Run Code Online (Sandbox Code Playgroud)
只需使用加密的会话 cookie。JWT 令牌并不打算存储在本地(在 localStorage 或 cookie 中),因为您只是放弃了 JWT 的预期好处。
从您的代码片段来看,您似乎正在使用 JWT 令牌作为会话 cookie 的替代品。为什么不一开始就使用会话cookie呢?
归档时间: |
|
查看次数: |
1039 次 |
最近记录: |