Merge pull request #112 from linagora/fix/auth-flow
fix(auth): preserve session on reload and correct 401 redirect flow
This commit is contained in:
@@ -5,6 +5,7 @@ import { Loading } from "../../components/Loading/Loading";
|
|||||||
import { Error } from "../../components/Error/Error";
|
import { Error } from "../../components/Error/Error";
|
||||||
import { push } from "redux-first-history";
|
import { push } from "redux-first-history";
|
||||||
import { redirectTo } from "../../utils/apiUtils";
|
import { redirectTo } from "../../utils/apiUtils";
|
||||||
|
import { setTokens, setUserData } from "./userSlice";
|
||||||
|
|
||||||
export function HandleLogin() {
|
export function HandleLogin() {
|
||||||
const userData = useAppSelector((state) => state.user);
|
const userData = useAppSelector((state) => state.user);
|
||||||
@@ -13,6 +14,20 @@ export function HandleLogin() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const initiateLogin = async () => {
|
const initiateLogin = async () => {
|
||||||
if (!userData.userData) {
|
if (!userData.userData) {
|
||||||
|
const savedToken = sessionStorage.getItem("tokenSet")
|
||||||
|
? JSON.parse(sessionStorage.getItem("tokenSet")!)
|
||||||
|
: null;
|
||||||
|
const savedUser = sessionStorage.getItem("userData")
|
||||||
|
? JSON.parse(sessionStorage.getItem("userData")!)
|
||||||
|
: null;
|
||||||
|
|
||||||
|
if (savedToken && savedUser) {
|
||||||
|
dispatch(setTokens(savedToken));
|
||||||
|
dispatch(setUserData(savedUser));
|
||||||
|
dispatch(push("/"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const loginurl = await Auth();
|
const loginurl = await Auth();
|
||||||
|
|
||||||
sessionStorage.setItem(
|
sessionStorage.setItem(
|
||||||
@@ -28,7 +43,7 @@ export function HandleLogin() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
initiateLogin();
|
initiateLogin();
|
||||||
}, [userData]);
|
}, [userData, dispatch]);
|
||||||
|
|
||||||
if (!calendars.pending && !userData.loading) {
|
if (!calendars.pending && !userData.loading) {
|
||||||
dispatch(push("/error"));
|
dispatch(push("/error"));
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export function CallbackResume() {
|
|||||||
|
|
||||||
sessionStorage.removeItem("redirectState");
|
sessionStorage.removeItem("redirectState");
|
||||||
sessionStorage.setItem("tokenSet", JSON.stringify(data?.tokenSet));
|
sessionStorage.setItem("tokenSet", JSON.stringify(data?.tokenSet));
|
||||||
|
sessionStorage.setItem("userData", JSON.stringify(data?.userinfo));
|
||||||
// Redirect to main page after successful callback
|
// Redirect to main page after successful callback
|
||||||
dispatch(push("/"));
|
dispatch(push("/"));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const api = ky.extend({
|
|||||||
const loginurl = await Auth();
|
const loginurl = await Auth();
|
||||||
|
|
||||||
sessionStorage.setItem(
|
sessionStorage.setItem(
|
||||||
"tokenSet",
|
"redirectState",
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
code_verifier: loginurl.code_verifier,
|
code_verifier: loginurl.code_verifier,
|
||||||
state: loginurl.state,
|
state: loginurl.state,
|
||||||
|
|||||||
Reference in New Issue
Block a user