db authentication replaced by Google

This commit is contained in:
2024-01-08 15:17:18 +01:00
parent 8367606493
commit e29d813aee
11 changed files with 58 additions and 223 deletions

View File

@@ -0,0 +1,29 @@
import NextAuth, { NextAuthConfig } from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
export const authConfig:NextAuthConfig = {
callbacks: {
async signIn({ account, profile }) {
if (account?.provider === "google") {
return profile?.email_verified === true && profile?.email?.endsWith("@google.com") === true
}
return true // Do different verification for other providers that don't have `email_verified`
},
authorized({ auth, request: { nextUrl } }) {
const isLoggedIn = !!auth?.user;
return(isLoggedIn);
},
},
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID,
clientSecret: process.env.GOOGLE_SECRET,
}),
],
session: {
// Use JSON Web Tokens for session instead of database sessions.
// This option can be used with or without a database for users/accounts.
// Note: `jwt` is automatically set to `true` if no database is specified.
strategy: 'jwt'
},
};

29
app/lib/auth.google.ts Normal file
View File

@@ -0,0 +1,29 @@
import NextAuth, { NextAuthConfig } from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
const authConfig: NextAuthConfig = {
callbacks: {
// This method verifies if the user is logged in or not
// It is called by Next-Auth when the midleware calls
// the `auth` method (exported below)
authorized({ auth, request: { nextUrl } }) {
const isLoggedIn = !!auth?.user;
return (isLoggedIn);
},
},
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID,
clientSecret: process.env.GOOGLE_SECRET,
}),
],
secret: process.env.AUTH_SECRET,
session: {
// Use JSON Web Tokens for session instead of database sessions.
// This option can be used with or without a database for users/accounts.
// Note: `jwt` is automatically set to `true` if no database is specified.
strategy: 'jwt'
},
};
export const { auth, handlers: { GET, POST } } = NextAuth(authConfig);

View File

@@ -1,23 +0,0 @@
'use server';
import { signIn } from '@/auth';
import { AuthError } from 'next-auth';
export async function authenticate(
prevState: string | undefined,
formData: FormData,
) {
try {
await signIn('credentials', formData);
} catch (error) {
if (error instanceof AuthError) {
switch (error.type) {
case 'CredentialsSignin':
return 'Invalid credentials.';
default:
return 'Something went wrong.';
}
}
throw error;
}
}