Guardian 的问题 - EnsureAuthenticated 不工作
Issue with Guardian - EnsureAuthenticated not working
我正在尝试为我的应用程序获取 Guardian 授权。但我完全陷入困境,找不到任何支持我遇到的问题。
据我所知,我已经准确地按照文档显示的方式设置了 Guardian,但是当我在浏览器中测试身份验证时,它在 Guardian 提供的 EnsureAuthenticated 插件上失败了。
这是我正在处理的内容:
配置:
应用程序中的所有值都已正确填写。
config :statcasters, MyApp.Guardian,
allowed_algos: ["HS512"],
verify_module: Guardian.JWT,
issuer: "my_app",
ttl: {30, :days},
allowed_drift: 2000,
verify_issuer: true,
secret_key: "my_secret_key"
经过验证的控制器:
defmodule Statcasters.LeagueController do
use StatcastersWeb, :controller
alias Statcasters.{League, Repo}
plug Guardian.Plug.EnsureAuthenticated
def create(conn, %{"league" => league_params}) do
changeset = League.changeset(%League{}, league_params)
case Repo.insert(changeset) do
{:ok, league} ->
conn
|> put_status(:created)
|> render("league.json", league: league)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(Statcasters.ChangesetView, "error.json", changeset: changeset)
end
end
end
在这个控制器中是失败的地方。当它到达 EnsureAuthenticated 插件时,它就停在那里。但此时我在 header 中有一个有效的 JWT。
这是我的参数:
Parameters: %{"headers" => %{"Authorization" => "Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJTdGF0Y2FzdGVycyIsImV4cCI6MTUyNzUzMDA1OSwiaWF0IjoxNTI0OTM4MDU5LCJMiOiJTdGF0Y2FzdGVycyIsImp0aSI6IjJhNDg3MWQ4LTkwZGEtNDNlYS1hMGJlLWVjNjgwNjIzOTBkOCIsIm5iZiI6MTUyNDkzODA1OCwic3ViIjoiMSIsInR5cCI6InJlZnJlc2gifQ.EKeaHoQiW9tmtsabPIjj6069zD6Vcex9w3xfkXP5MIyiogWh400S6wMzaAsTQd20I5ai_y9jJTtgLzqYfbGTaQ"}
我已验证 JWT 有效 here。
请求:
axios.post('/api/v1/leagues', {
league: {
name: this.$refs.league_name.value,
player_limit: this.$refs.player_limit.value,
},
headers: {
Authorization: "Bearer jwt(correct jwt)"
}
}).then(response => {
}).catch(error => {
})
同样,问题是我的身份验证在 Plug.EnsureAuthenticated
挂钩中失败。但我不明白为什么,因为我似乎正确设置了所有内容并且 JWT 在 auth header.
中
您将 header 作为 POST 参数发送,而不是 HTTP header。 You need to put the headers in the third argument for axios.post
:
axios.post('/api/v1/leagues', {
league: {
name: this.$refs.league_name.value,
player_limit: this.$refs.player_limit.value,
}
}, {
headers: {
Authorization: "Bearer jwt(correct jwt)"
}
})
我正在尝试为我的应用程序获取 Guardian 授权。但我完全陷入困境,找不到任何支持我遇到的问题。
据我所知,我已经准确地按照文档显示的方式设置了 Guardian,但是当我在浏览器中测试身份验证时,它在 Guardian 提供的 EnsureAuthenticated 插件上失败了。
这是我正在处理的内容:
配置:
应用程序中的所有值都已正确填写。
config :statcasters, MyApp.Guardian,
allowed_algos: ["HS512"],
verify_module: Guardian.JWT,
issuer: "my_app",
ttl: {30, :days},
allowed_drift: 2000,
verify_issuer: true,
secret_key: "my_secret_key"
经过验证的控制器:
defmodule Statcasters.LeagueController do
use StatcastersWeb, :controller
alias Statcasters.{League, Repo}
plug Guardian.Plug.EnsureAuthenticated
def create(conn, %{"league" => league_params}) do
changeset = League.changeset(%League{}, league_params)
case Repo.insert(changeset) do
{:ok, league} ->
conn
|> put_status(:created)
|> render("league.json", league: league)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(Statcasters.ChangesetView, "error.json", changeset: changeset)
end
end
end
在这个控制器中是失败的地方。当它到达 EnsureAuthenticated 插件时,它就停在那里。但此时我在 header 中有一个有效的 JWT。
这是我的参数:
Parameters: %{"headers" => %{"Authorization" => "Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJTdGF0Y2FzdGVycyIsImV4cCI6MTUyNzUzMDA1OSwiaWF0IjoxNTI0OTM4MDU5LCJMiOiJTdGF0Y2FzdGVycyIsImp0aSI6IjJhNDg3MWQ4LTkwZGEtNDNlYS1hMGJlLWVjNjgwNjIzOTBkOCIsIm5iZiI6MTUyNDkzODA1OCwic3ViIjoiMSIsInR5cCI6InJlZnJlc2gifQ.EKeaHoQiW9tmtsabPIjj6069zD6Vcex9w3xfkXP5MIyiogWh400S6wMzaAsTQd20I5ai_y9jJTtgLzqYfbGTaQ"}
我已验证 JWT 有效 here。
请求:
axios.post('/api/v1/leagues', {
league: {
name: this.$refs.league_name.value,
player_limit: this.$refs.player_limit.value,
},
headers: {
Authorization: "Bearer jwt(correct jwt)"
}
}).then(response => {
}).catch(error => {
})
同样,问题是我的身份验证在 Plug.EnsureAuthenticated
挂钩中失败。但我不明白为什么,因为我似乎正确设置了所有内容并且 JWT 在 auth header.
您将 header 作为 POST 参数发送,而不是 HTTP header。 You need to put the headers in the third argument for axios.post
:
axios.post('/api/v1/leagues', {
league: {
name: this.$refs.league_name.value,
player_limit: this.$refs.player_limit.value,
}
}, {
headers: {
Authorization: "Bearer jwt(correct jwt)"
}
})