ajax 调用后的 Elixir 会话数据
Elixir Session data after ajax call
我正在使用 Phoenix 框架构建我的应用程序。
我的用户使用 OAuth2 登录,之后他们被重定向到我的网页。
我的应用程序有一个插件,它将用户保存在会话变量中:
def call(conn, _) do
user = get_session(conn, :user)
#Find user in database
case SmiksAanvraag.User_Functions.getUser(user) do
result ->
conn
|> assign(:user, user)
|> assign(:username, result)
|> assign(:isAdmin, User_Functions.isAdmin(user))
"" -> IO.inspect "Not logged in"
conn |> redirect(external: "http://www.localhost:4000/") |> halt()
end
end
def login(conn, user) do
conn
|> assign(:user, Map.get(user, "username"))
|> assign(:username, SmiksAanvraag.User_Functions.getUser(Map.get(user, "username")))
|> put_session(:user, Map.get(user, "username"))
|> configure_session(renew: true)
end
这一切都很好,直到用户对服务器进行 Ajax 调用(我使用的是 Axios)。在那一刻,会话信息丢失了。
这个问题的典型解决方案是什么?我通过 Ajax 调用(安全地)传递哪些信息以通知服务器用户仍处于登录状态?此时此刻,我进行以下调用:
let req = axios.create({
withCredentials: true,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'x-csrf-token': document.head.querySelector("[name~=csrf-token][content]").content
},
params: {
offset: me.state.offset,
searchData: searchData
}})
req.get(`${Url.value}/api/getAllData`).then(response =>
{
this.setState({data: response.data.data, count: response.data.count})
}).catch(function (error) {
console.log(error);
});
好的,我找到了。我的axios header写错了...应该是'Accept': 'application/json', 'Content-Type': 'application/json'
我正在使用 Phoenix 框架构建我的应用程序。 我的用户使用 OAuth2 登录,之后他们被重定向到我的网页。 我的应用程序有一个插件,它将用户保存在会话变量中:
def call(conn, _) do
user = get_session(conn, :user)
#Find user in database
case SmiksAanvraag.User_Functions.getUser(user) do
result ->
conn
|> assign(:user, user)
|> assign(:username, result)
|> assign(:isAdmin, User_Functions.isAdmin(user))
"" -> IO.inspect "Not logged in"
conn |> redirect(external: "http://www.localhost:4000/") |> halt()
end
end
def login(conn, user) do
conn
|> assign(:user, Map.get(user, "username"))
|> assign(:username, SmiksAanvraag.User_Functions.getUser(Map.get(user, "username")))
|> put_session(:user, Map.get(user, "username"))
|> configure_session(renew: true)
end
这一切都很好,直到用户对服务器进行 Ajax 调用(我使用的是 Axios)。在那一刻,会话信息丢失了。 这个问题的典型解决方案是什么?我通过 Ajax 调用(安全地)传递哪些信息以通知服务器用户仍处于登录状态?此时此刻,我进行以下调用:
let req = axios.create({
withCredentials: true,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'x-csrf-token': document.head.querySelector("[name~=csrf-token][content]").content
},
params: {
offset: me.state.offset,
searchData: searchData
}})
req.get(`${Url.value}/api/getAllData`).then(response =>
{
this.setState({data: response.data.data, count: response.data.count})
}).catch(function (error) {
console.log(error);
});
好的,我找到了。我的axios header写错了...应该是'Accept': 'application/json', 'Content-Type': 'application/json'