Session expiry

This commit is contained in:
Lea 2024-01-17 10:54:06 +01:00
parent fc6a2523f0
commit 9ffbdae1b6
Signed by: Lea
GPG key ID: 1BAFFE8347019C42
4 changed files with 22 additions and 3 deletions

View file

@ -12,6 +12,7 @@
"@radix-ui/themes": "^2.0.3", "@radix-ui/themes": "^2.0.3",
"@types/bcryptjs": "^2.4.6", "@types/bcryptjs": "^2.4.6",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"dayjs": "^1.11.10",
"lucide-react": "^0.311.0", "lucide-react": "^0.311.0",
"next": "14.0.4", "next": "14.0.4",
"next-auth": "^4.24.5", "next-auth": "^4.24.5",

View file

@ -14,6 +14,9 @@ dependencies:
bcryptjs: bcryptjs:
specifier: ^2.4.3 specifier: ^2.4.3
version: 2.4.3 version: 2.4.3
dayjs:
specifier: ^1.11.10
version: 1.11.10
lucide-react: lucide-react:
specifier: ^0.311.0 specifier: ^0.311.0
version: 0.311.0(react@18.2.0) version: 0.311.0(react@18.2.0)
@ -2038,6 +2041,10 @@ packages:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
dev: true dev: true
/dayjs@1.11.10:
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
dev: false
/debug@3.2.7: /debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies: peerDependencies:

View file

@ -1,9 +1,9 @@
import NextAuth from "next-auth"; import NextAuth, { AuthOptions } from "next-auth";
import CredentialProvider from "next-auth/providers/credentials"; import CredentialProvider from "next-auth/providers/credentials";
import { sha256sum } from "@/lib/util"; import { sha256sum } from "@/lib/util";
import { validateCredentials } from "@/lib/db"; import { validateCredentials } from "@/lib/db";
export const authOptions = { export const authOptions: AuthOptions = {
providers: [ providers: [
CredentialProvider({ CredentialProvider({
name: 'Mail account', name: 'Mail account',
@ -30,6 +30,10 @@ export const authOptions = {
}, },
}), }),
], ],
session: {
strategy: 'jwt',
maxAge: 4 * 60 * 60 // 4 hours
},
}; };
const handler = NextAuth(authOptions); const handler = NextAuth(authOptions);

View file

@ -5,6 +5,10 @@ import { Avatar, Box, Button, Card, Flex, IconButton, Popover, Text } from "@rad
import { BookUserIcon, HomeIcon } from "lucide-react"; import { BookUserIcon, HomeIcon } from "lucide-react";
import { signOut, useSession } from "next-auth/react"; import { signOut, useSession } from "next-auth/react";
import Link from "next/link"; import Link from "next/link";
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
dayjs.extend(relativeTime);
export default function NavigationPanel() { export default function NavigationPanel() {
const session = useSession(); const session = useSession();
@ -35,7 +39,10 @@ export default function NavigationPanel() {
radius="full" radius="full"
fallback={session.data.user.name?.slice(0, 1) || "@"} fallback={session.data.user.name?.slice(0, 1) || "@"}
/> />
<Text size='4'>{session.data.user.email}</Text> <Flex direction="column">
<Text size='4'>{session.data.user.email}</Text>
<Text weight="light" size="2">Session valid for {dayjs(session.data.expires).fromNow(true)}</Text>
</Flex>
</Flex> </Flex>
</Card> </Card>