mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-12-22 19:01:26 +00:00
Attempt to fix inability to logout from some instances (subdomains) (#1809)
* slight refactor, tweak params * fix paths * remove domain * remove expires * Use maxAge instead of expires --------- Co-authored-by: SleeplessOne1917 <abias1122@gmail.com>
This commit is contained in:
parent
f6cbc896af
commit
7eddc52c13
5 changed files with 37 additions and 16 deletions
|
@ -26,6 +26,7 @@ export const updateUnreadCountsInterval = 30000;
|
|||
export const fetchLimit = 20;
|
||||
export const relTags = "noopener nofollow";
|
||||
export const emDash = "\u2014";
|
||||
export const authCookieName = "jwt";
|
||||
|
||||
/**
|
||||
* Accepted formats:
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// import Cookies from 'js-cookie';
|
||||
import { isAuthPath } from "@utils/app";
|
||||
import { isBrowser } from "@utils/browser";
|
||||
import { isHttps } from "@utils/env";
|
||||
import { clearAuthCookie, isBrowser, setAuthCookie } from "@utils/browser";
|
||||
import * as cookie from "cookie";
|
||||
import jwt_decode from "jwt-decode";
|
||||
import { LoginResponse, MyUserInfo } from "lemmy-js-client";
|
||||
|
@ -31,15 +29,10 @@ export class UserService {
|
|||
public login(res: LoginResponse) {
|
||||
const expires = new Date();
|
||||
expires.setDate(expires.getDate() + 365);
|
||||
|
||||
if (isBrowser() && res.jwt) {
|
||||
toast(I18NextService.i18n.t("logged_in"));
|
||||
document.cookie = cookie.serialize("jwt", res.jwt, {
|
||||
expires,
|
||||
secure: isHttps(),
|
||||
domain: location.hostname,
|
||||
sameSite: true,
|
||||
path: "/",
|
||||
});
|
||||
setAuthCookie(res.jwt);
|
||||
this.#setJwtInfo();
|
||||
}
|
||||
}
|
||||
|
@ -47,14 +40,11 @@ export class UserService {
|
|||
public logout() {
|
||||
this.jwtInfo = undefined;
|
||||
this.myUserInfo = undefined;
|
||||
|
||||
if (isBrowser()) {
|
||||
document.cookie = cookie.serialize("jwt", "", {
|
||||
maxAge: 0,
|
||||
path: "/",
|
||||
domain: location.hostname,
|
||||
sameSite: true,
|
||||
});
|
||||
clearAuthCookie();
|
||||
}
|
||||
|
||||
if (isAuthPath(location.pathname)) {
|
||||
location.replace("/");
|
||||
} else {
|
||||
|
@ -64,14 +54,17 @@ export class UserService {
|
|||
|
||||
public auth(throwErr = false): string | undefined {
|
||||
const jwt = this.jwtInfo?.jwt;
|
||||
|
||||
if (jwt) {
|
||||
return jwt;
|
||||
} else {
|
||||
const msg = "No JWT cookie found";
|
||||
|
||||
if (throwErr && isBrowser()) {
|
||||
console.error(msg);
|
||||
toast(I18NextService.i18n.t("not_logged_in"), "danger");
|
||||
}
|
||||
|
||||
return undefined;
|
||||
// throw msg;
|
||||
}
|
||||
|
@ -80,6 +73,7 @@ export class UserService {
|
|||
#setJwtInfo() {
|
||||
if (isBrowser()) {
|
||||
const { jwt } = cookie.parse(document.cookie);
|
||||
|
||||
if (jwt) {
|
||||
this.jwtInfo = { jwt, claims: jwt_decode(jwt) };
|
||||
}
|
||||
|
|
10
src/shared/utils/browser/clear-auth-cookie.ts
Normal file
10
src/shared/utils/browser/clear-auth-cookie.ts
Normal file
|
@ -0,0 +1,10 @@
|
|||
import * as cookie from "cookie";
|
||||
import { authCookieName } from "../../config";
|
||||
|
||||
export default function clearAuthCookie() {
|
||||
document.cookie = cookie.serialize(authCookieName, "", {
|
||||
maxAge: -1,
|
||||
sameSite: true,
|
||||
path: "/",
|
||||
});
|
||||
}
|
|
@ -1,19 +1,23 @@
|
|||
import canShare from "./can-share";
|
||||
import clearAuthCookie from "./clear-auth-cookie";
|
||||
import dataBsTheme from "./data-bs-theme";
|
||||
import isBrowser from "./is-browser";
|
||||
import isDark from "./is-dark";
|
||||
import loadCss from "./load-css";
|
||||
import restoreScrollPosition from "./restore-scroll-position";
|
||||
import saveScrollPosition from "./save-scroll-position";
|
||||
import setAuthCookie from "./set-auth-cookie";
|
||||
import share from "./share";
|
||||
|
||||
export {
|
||||
canShare,
|
||||
clearAuthCookie,
|
||||
dataBsTheme,
|
||||
isBrowser,
|
||||
isDark,
|
||||
loadCss,
|
||||
restoreScrollPosition,
|
||||
saveScrollPosition,
|
||||
setAuthCookie,
|
||||
share,
|
||||
};
|
||||
|
|
12
src/shared/utils/browser/set-auth-cookie.ts
Normal file
12
src/shared/utils/browser/set-auth-cookie.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { isHttps } from "@utils/env";
|
||||
import * as cookie from "cookie";
|
||||
import { authCookieName } from "../../config";
|
||||
|
||||
export default function setAuthCookie(jwt: string) {
|
||||
document.cookie = cookie.serialize(authCookieName, jwt, {
|
||||
maxAge: 365 * 24 * 60 * 60 * 1000,
|
||||
secure: isHttps(),
|
||||
sameSite: true,
|
||||
path: "/",
|
||||
});
|
||||
}
|
Loading…
Reference in a new issue