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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions