mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
Testing anonymous sessions and cleaning out when logging in.
This commit is contained in:
parent
c9b6269ce9
commit
a3558f590f
4 changed files with 56 additions and 37 deletions
|
|
@ -14,7 +14,7 @@ import {signinUsername} from './login.routes';
|
||||||
export class LoginController extends Controller {
|
export class LoginController extends Controller {
|
||||||
constructor(
|
constructor(
|
||||||
@inject(LoginRequestsService) private readonly loginRequestsService: LoginRequestsService,
|
@inject(LoginRequestsService) private readonly loginRequestsService: LoginRequestsService,
|
||||||
@inject(SessionsService) private luciaService: SessionsService,
|
@inject(SessionsService) private sessionsService: SessionsService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
@ -29,6 +29,13 @@ export class LoginController extends Controller {
|
||||||
const { username, password } = c.req.valid('json');
|
const { username, password } = c.req.valid('json');
|
||||||
const session = await this.loginRequestsService.verify({ username, password }, c.req);
|
const session = await this.loginRequestsService.verify({ username, password }, c.req);
|
||||||
const sessionCookie = createSessionTokenCookie(session.id, cookieExpiresAt);
|
const sessionCookie = createSessionTokenCookie(session.id, cookieExpiresAt);
|
||||||
|
|
||||||
|
// Cleanup old session
|
||||||
|
const currentSession = c.var.session;
|
||||||
|
if (currentSession) {
|
||||||
|
await this.sessionsService.invalidateSession(currentSession.id);
|
||||||
|
}
|
||||||
|
|
||||||
console.log('set cookie', sessionCookie);
|
console.log('set cookie', sessionCookie);
|
||||||
setSessionCookie(c, sessionCookie);
|
setSessionCookie(c, sessionCookie);
|
||||||
return c.json({ message: 'ok' });
|
return c.json({ message: 'ok' });
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import 'reflect-metadata';
|
import 'reflect-metadata';
|
||||||
import {
|
import {
|
||||||
|
type SessionCookie,
|
||||||
cookieExpiresAt,
|
cookieExpiresAt,
|
||||||
cookieName,
|
cookieName,
|
||||||
createBlankSessionTokenCookie,
|
createBlankSessionTokenCookie,
|
||||||
createSessionTokenCookie,
|
createSessionTokenCookie,
|
||||||
type SessionCookie,
|
|
||||||
setSessionCookie,
|
setSessionCookie,
|
||||||
} from '$lib/server/api/common/utils/cookies';
|
} from '$lib/server/api/common/utils/cookies';
|
||||||
import { SessionsService } from '$lib/server/api/services/sessions.service';
|
import { SessionsService } from '$lib/server/api/services/sessions.service';
|
||||||
|
|
@ -34,8 +34,20 @@ export const verifyOrigin: MiddlewareHandler<AppBindings> = createMiddleware(asy
|
||||||
export const validateAuthSession: MiddlewareHandler<AppBindings> = createMiddleware(async (c, next) => {
|
export const validateAuthSession: MiddlewareHandler<AppBindings> = createMiddleware(async (c, next) => {
|
||||||
const sessionId = getCookie(c, cookieName) ?? null;
|
const sessionId = getCookie(c, cookieName) ?? null;
|
||||||
if (!sessionId) {
|
if (!sessionId) {
|
||||||
|
const requestIpAddress = c.req.header('x-real-ip');
|
||||||
|
const requestIpCountry = c.req.header('x-vercel-ip-country');
|
||||||
|
const session = await sessionService.createSession(
|
||||||
|
sessionService.generateSessionToken(),
|
||||||
|
'anonymous',
|
||||||
|
requestIpCountry || 'unknown',
|
||||||
|
requestIpAddress || 'unknown',
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
const sessionCookie = createSessionTokenCookie(session.id, cookieExpiresAt);
|
||||||
|
setSessionCookie(c, sessionCookie);
|
||||||
|
c.set('session', session);
|
||||||
c.set('user', null);
|
c.set('user', null);
|
||||||
c.set('session', null);
|
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ export type Session = {
|
||||||
isTwoFactorAuthenticated: boolean;
|
isTwoFactorAuthenticated: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SessionValidationResult = { session: Session; user: Users } | { session: null; user: null } | { session: Session; user: undefined };
|
export type SessionValidationResult = { session: Session; user: Users } | { session: null; user: null } | { session: Session; user: null };
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export class SessionsService {
|
export class SessionsService {
|
||||||
|
|
@ -97,7 +97,7 @@ export class SessionsService {
|
||||||
isTwoFactorAuthenticated: result.is_two_factor_authenticated,
|
isTwoFactorAuthenticated: result.is_two_factor_authenticated,
|
||||||
};
|
};
|
||||||
let user: Users | undefined = undefined;
|
let user: Users | undefined = undefined;
|
||||||
if (session.userId) {
|
if (session.userId && session.userId !== 'anonymous') {
|
||||||
user = await this.usersRepository.findOneById(session.userId);
|
user = await this.usersRepository.findOneById(session.userId);
|
||||||
}
|
}
|
||||||
if (Date.now() >= session.expiresAt.getTime()) {
|
if (Date.now() >= session.expiresAt.getTime()) {
|
||||||
|
|
@ -126,7 +126,7 @@ export class SessionsService {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { session, user };
|
return { session, user: user ?? null };
|
||||||
}
|
}
|
||||||
|
|
||||||
async invalidateSession(sessionId: string) {
|
async invalidateSession(sessionId: string) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue