Skip to content

Bug #132 seems to be a problem in 0.7.4 against Payload 3.61.1 #153

Description

@rikrose

Describe the bug
After using Google OIDC (I haven't tested others), the redirect to /admin uses a GET to /api/{collection}/me to retrieve the logged in user. This fails with a null user, unless the collection has auth: useSessions set to false. As a result, you're presented with the login page again.

To Reproduce
Install Payload 3.61.1, payload-auth-plugin 0.7.4. The AfterLogin component is straight from the example on the website, as is the AdminAccounts collection.

export default buildConfig({
  admin: {
    user: AdminUsers.slug,
    importMap: {
      baseDir: path.resolve(dirname),
    },
    components: {
      // biome-ignore lint/security/noSecrets: Payload component
      afterLogin: ['@/components/AfterLogin/index#AdminLogin'],
    },
  },
  bin: [
    {
      scriptPath: path.resolve(dirname, 'seed.ts'),
      key: 'seed',
    },
  ],
  serverURL: process.env.NEXT_PUBLIC_SERVER_URL,
  collections: [AdminAccounts, AdminUsers, Pages],
  editor: lexicalEditor(),
  secret: process.env.PAYLOAD_SECRET || '',
  typescript: {
    outputFile: path.resolve(dirname, 'payload-types.ts'),
  },
  db: postgresAdapter({
    pool: {
      connectionString: process.env.DATABASE_URI || '',
    },
  }),
  plugins: [
    // storage-adapter-placeholder
    authPlugin({
      name: 'admin',
      useAdmin: true,
      allowOAuthAutoSignUp: false,
      usersCollectionSlug: AdminUsers.slug,
      accountsCollectionSlug: AdminAccounts.slug,
      successRedirectPath: '/admin/collections',
      errorRedirectPath: '/admin/signin',
      providers: [
        GoogleAuthProvider({
          client_id: process.env.GOOGLE_CLIENT_ID as string,
          client_secret: process.env.GOOGLE_CLIENT_SECRET as string,
        }),
      ],
    }),
  ],
})

export const AdminUsers: CollectionConfig = withUsersCollection({
  slug: 'adminUsers',
  admin: {
    useAsTitle: 'email',
  },
  access: {
    admin: () => { console.log('beep'); return true }, 
  },
  auth: {
    disableLocalStrategy: true,
  },
  fields: [
    {
      name: 'email',
      type: 'email',
      required: true,
      label: 'Email',
    },
  ],
  timestamps: true,
})

seed.ts:

import type { SanitizedConfig } from 'payload'

import payload from 'payload'

// Script must define a "script" function export that accepts the sanitized config
export const script = async (config: SanitizedConfig) => {
  await payload.init({ config })

  await payload.create({
    collection: 'adminUsers',
    data: {
      email: '<add your google account email here>',
    },
  })

  payload.logger.info('Successfully seeded!')
  process.exit(0)
}

Expected behavior
After signing in with the Google OIDC, the admin console page is presented.

Desktop (please complete the following information):

  • OS: Windows 11
  • Browser: Chrome
  • Version: 142.0.7444.176

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions