Merge pull request #4105 from Budibase/fix/log-out-action
Fix log out action
This commit is contained in:
commit
6fcf0de0e5
|
@ -1,13 +1,38 @@
|
||||||
<script>
|
<script>
|
||||||
import { Body } from "@budibase/bbui"
|
import { Label, Body, Layout } from "@budibase/bbui"
|
||||||
|
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
|
||||||
|
|
||||||
|
export let parameters
|
||||||
|
export let bindings = []
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<Body size="S">This action doesn't require any additional settings.</Body>
|
<Layout noPadding gap="M">
|
||||||
|
<Body size="S">
|
||||||
|
Please enter the URL you would like to be redirected to after logging out.
|
||||||
|
If you don't enter a value, you'll be redirected to the login screen.
|
||||||
|
</Body>
|
||||||
|
<div class="content">
|
||||||
|
<Label small>Redirect URL</Label>
|
||||||
|
<DrawerBindableInput
|
||||||
|
title="Return URL"
|
||||||
|
value={parameters.redirectUrl}
|
||||||
|
on:change={value => (parameters.redirectUrl = value.detail)}
|
||||||
|
{bindings}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.root {
|
.root {
|
||||||
|
max-width: 400px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
.content {
|
||||||
|
display: grid;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--spacing-m);
|
||||||
|
grid-template-columns: auto 1fr;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -18,6 +18,15 @@ export const logIn = async ({ email, password }) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs the user out and invaidates their session.
|
||||||
|
*/
|
||||||
|
export const logOut = async () => {
|
||||||
|
return await API.post({
|
||||||
|
url: "/api/global/auth/logout",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches the currently logged in user object
|
* Fetches the currently logged in user object
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -11,8 +11,14 @@ const createAuthStore = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const logOut = async () => {
|
const logOut = async () => {
|
||||||
|
try {
|
||||||
|
await API.logOut()
|
||||||
|
} catch (error) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manually destroy cookie to be sure
|
||||||
window.document.cookie = `budibase:auth=; budibase:currentapp=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`
|
window.document.cookie = `budibase:auth=; budibase:currentapp=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`
|
||||||
window.location = "/builder/auth/login"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -18,8 +18,8 @@ const createRouteStore = () => {
|
||||||
const fetchRoutes = async () => {
|
const fetchRoutes = async () => {
|
||||||
const routeConfig = await API.fetchRoutes()
|
const routeConfig = await API.fetchRoutes()
|
||||||
let routes = []
|
let routes = []
|
||||||
Object.values(routeConfig.routes).forEach(route => {
|
Object.values(routeConfig.routes || {}).forEach(route => {
|
||||||
Object.entries(route.subpaths).forEach(([path, config]) => {
|
Object.entries(route.subpaths || {}).forEach(([path, config]) => {
|
||||||
routes.push({
|
routes.push({
|
||||||
path,
|
path,
|
||||||
screenId: config.screenId,
|
screenId: config.screenId,
|
||||||
|
@ -83,12 +83,23 @@ const createRouteStore = () => {
|
||||||
const setRouterLoaded = () => {
|
const setRouterLoaded = () => {
|
||||||
store.update(state => ({ ...state, routerLoaded: true }))
|
store.update(state => ({ ...state, routerLoaded: true }))
|
||||||
}
|
}
|
||||||
|
const createFullURL = relativeURL => {
|
||||||
|
if (!relativeURL?.startsWith("/")) {
|
||||||
|
return relativeURL
|
||||||
|
}
|
||||||
|
if (!window.location.href.includes("#")) {
|
||||||
|
return `${window.location.href}#${relativeURL}`
|
||||||
|
}
|
||||||
|
const base = window.location.href.split("#")[0]
|
||||||
|
return `${base}#${relativeURL}`
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
subscribe: store.subscribe,
|
subscribe: store.subscribe,
|
||||||
actions: {
|
actions: {
|
||||||
fetchRoutes,
|
fetchRoutes,
|
||||||
navigate,
|
navigate,
|
||||||
|
createFullURL,
|
||||||
setRouteParams,
|
setRouteParams,
|
||||||
setQueryParams,
|
setQueryParams,
|
||||||
setActiveRoute,
|
setActiveRoute,
|
||||||
|
|
|
@ -112,8 +112,20 @@ const refreshDataProviderHandler = async (action, context) => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const logoutHandler = async () => {
|
const logoutHandler = async action => {
|
||||||
await authStore.actions.logOut()
|
await authStore.actions.logOut()
|
||||||
|
let redirectUrl = "/builder/auth/login"
|
||||||
|
let internal = false
|
||||||
|
if (action.parameters.redirectUrl) {
|
||||||
|
internal = action.parameters.redirectUrl?.startsWith("/")
|
||||||
|
redirectUrl = routeStore.actions.createFullURL(
|
||||||
|
action.parameters.redirectUrl
|
||||||
|
)
|
||||||
|
}
|
||||||
|
window.location.href = redirectUrl
|
||||||
|
if (internal) {
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const clearFormHandler = async (action, context) => {
|
const clearFormHandler = async (action, context) => {
|
||||||
|
|
|
@ -141,7 +141,9 @@ exports.resetUpdate = async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.logout = async ctx => {
|
exports.logout = async ctx => {
|
||||||
await platformLogout({ ctx, userId: ctx.user._id })
|
if (ctx.user && ctx.user._id) {
|
||||||
|
await platformLogout({ ctx, userId: ctx.user._id })
|
||||||
|
}
|
||||||
ctx.body = { message: "User logged out." }
|
ctx.body = { message: "User logged out." }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue