1

我坦率地承认,我对 next-auth 完全陌生,而且 Credentials 的文档非常简单,这是可以理解的。我已经让电子邮件链接过程完美运行,并将在此之上移动用户。

不幸的是,我有很多用户数据需要凭据才能登录,并且在花了几天时间一无所获之后,我只想知道我做错了什么!这是我的 [...nextauth].js 文件:

import NextAuth from "next-auth";
import Providers from "next-auth/providers";
import axios from 'axios'

const options = {
  providers: [
    Providers.Email({
      server: {
        host: process.env.EMAIL_SERVER_HOST,
        port: process.env.EMAIL_SERVER_PORT,
        auth: {
          user: process.env.EMAIL_SERVER_USER,
          pass: process.env.EMAIL_SERVER_PASSWORD
        }
      },
      from: process.env.EMAIL_FROM
    }),
    Providers.Credentials({
      credentials: {
        mem_num: { label: "Membership Number", type: "text", placeholder: "12345" },
        password: { label: "Password", type: "text" }
      },
      authorize: async (credentials) => {
        console.log("credentials: ", credentials)
        try {
          const data = {
            mem_num: credentials.mem_num,
            password: credentials.password
          }
          const user = await login(data)
          if (user) {
            console.log('user:', user)
            return user
          }
        } catch (error) {
          if (error.response) {
            console.log(error.response)
            Promise.reject(new Error('Invalid Number and Password combination'))
          }
        }
      }
    })
  ],
  site: process.env.NEXTAUTH_URL || "http://localhost:3000",
  database: process.env.DATABASE_URL,
  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.
    jwt: true,
  },
}

const login = async data => {
  var config = {
      headers: {
          'Content-Type': "application/json; charset=utf-8",
          'corsOrigin': '*',
          "Access-Control-Allow-Origin": "*"
      }
  };
  const url = process.env.DATABASE_URL;
  const result = await axios.post(url, data, config);
  console.log('result', result);
  return result;
};

export default (req, res) => NextAuth(req, res, options);
4

0 回答 0