Skip to content

Commit 2434cb2

Browse files
grv-saini-20coodos
andauthored
fix: user-redirection-when-voting (#750)
* fix: user-redirection-when-voting * chore: format --------- Co-authored-by: Merul Dhiman <me@merul.org>
1 parent be46a4f commit 2434cb2

1 file changed

Lines changed: 23 additions & 7 deletions

File tree

  • platforms/eVoting/src/app/(auth)/login

platforms/eVoting/src/app/(auth)/login/page.tsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export default function LoginPage() {
1414
const [errorMessage, setErrorMessage] = useState<string | null>(null);
1515
const [isLoading, setIsLoading] = useState(true);
1616
const [isMobile, setIsMobile] = useState(false);
17+
const [redirectTo, setRedirectTo] = useState<string>("/");
18+
1719

1820
useEffect(() => {
1921
setIsMobile(isMobileDevice());
@@ -24,6 +26,7 @@ export default function LoginPage() {
2426
if (typeof window === 'undefined') return;
2527

2628
const params = new URLSearchParams(window.location.search);
29+
const redirect = params.get("redirect");
2730
const ename = params.get('ename');
2831
const session = params.get('session');
2932
const signature = params.get('signature');
@@ -32,12 +35,17 @@ export default function LoginPage() {
3235
if (ename && session && signature) {
3336
// Clean up URL
3437
window.history.replaceState({}, '', window.location.pathname);
35-
38+
3639
// Auto-submit login
3740
handleAutoLogin(ename, session, signature, appVersion || '0.4.0');
3841
return;
3942
}
4043

44+
if (redirect && redirect.startsWith("/") && !redirect.startsWith("//")) {
45+
setRedirectTo(redirect);
46+
sessionStorage.setItem("postLoginRedirect", redirect);
47+
}
48+
4149
// If no query params, proceed with normal flow
4250
const fetchQRCode = async () => {
4351
try {
@@ -84,7 +92,11 @@ export default function LoginPage() {
8492
if (data.token && data.user) {
8593
setAuthToken(data.token);
8694
setAuthId(data.user.id);
87-
window.location.href = "/";
95+
const redirect =
96+
sessionStorage.getItem("postLoginRedirect") || redirectTo || "/";
97+
98+
sessionStorage.removeItem("postLoginRedirect");
99+
window.location.href = redirect;
88100
}
89101
} else {
90102
const errorData = await response.json();
@@ -110,7 +122,7 @@ export default function LoginPage() {
110122
eventSource.onmessage = (event) => {
111123
try {
112124
const data = JSON.parse(event.data);
113-
125+
114126
// Check for error messages (version mismatch)
115127
if (data.error && data.type === 'version_mismatch') {
116128
setErrorMessage(data.message || 'Your eID Wallet app version is outdated. Please update to continue.');
@@ -122,7 +134,11 @@ export default function LoginPage() {
122134
if (data.token && data.user) {
123135
setAuthToken(data.token);
124136
setAuthId(data.user.id);
125-
window.location.href = "/";
137+
const redirect =
138+
sessionStorage.getItem("postLoginRedirect") || redirectTo || "/";
139+
140+
sessionStorage.removeItem("postLoginRedirect");
141+
window.location.href = redirect;
126142
}
127143
} catch (error) {
128144
console.error("Error parsing SSE data:", error);
@@ -134,7 +150,7 @@ export default function LoginPage() {
134150
};
135151

136152
return () => eventSource.close();
137-
}, [sessionId, login]);
153+
}, [sessionId, login, redirectTo]);
138154

139155
const getAppStoreLink = () => {
140156
if (typeof navigator === 'undefined') return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
@@ -170,7 +186,7 @@ export default function LoginPage() {
170186
<div className="text-lg sm:text-xl space-x-1">
171187
{isMobile ? (
172188
<>
173-
<span>Click the button below using your</span>
189+
<span>Click the button below using you</span>
174190
<a href={getAppStoreLink()}><span className="font-bold underline">eID App</span></a>
175191
<span>to login</span>
176192
</>
@@ -184,7 +200,7 @@ export default function LoginPage() {
184200
</div>
185201

186202
{error && <div className="w-full text-red-500">{error}</div>}
187-
203+
188204
{errorMessage && (
189205
<div className="w-full mb-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-lg">
190206
<p className="font-semibold">Authentication Error</p>

0 commit comments

Comments
 (0)