尝试在应用程序路由器上使用nextauth为firebase设置适配器,但在注册时它不会创建会话也不会保存用户

6xfqseft  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(77)

我试图创建一个用户在firestore数据库中使用nextauth适配器firebase,但我总是unauthenticated当使用适配器和用户不是在数据库中创建,它的作品时,我删除适配器.
我已经尝试了多种创建适配器的方法,但它们都失败了
内斯托特观点

export const authOptions : NextAuthOptions = {
    pages: {
        signIn: '/auth/login',
    },
    providers: [
        CredentialsProvider({
            name: "Credentials",
            credentials: {  },
            async authorize(credentials) : Promise<any> {
                return await signInWithEmailAndPassword(auth, (credentials as any).email || '', (credentials as any).password || '')
                    .then(userCredential => {
                        if (userCredential.user) {
                            return userCredential.user
                        }
                        return null
                    })
                .catch(error => console.log(error))
            }
        }),
        GoogleProvider({
            clientId: process.env.GOOGLE_CLIENT_ID!,
            clientSecret: process.env.GOOGLE_CLIENT_SECRET!
        }),
        GitHubProvider({
            clientId: process.env.GITHUB_CLIENT_ID!,
            clientSecret: process.env.GITHUB_CLIENT_SECRET!
        }),
        DiscordProvider({
            clientId: process.env.DISCORD_CLIENT_ID,
            clientSecret: process.env.DISCORD_CLIENT_SECRET
        }),
    ],
    /* adapter: FirestoreAdapter({
        credential: cert({
          projectId: process.env.FIREBASE_PROJECT_ID,
          clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
          privateKey: process.env.FIREBASE_PRIVATE_KEY!.replace(/\\n/g, '\n')
        })
      }) */
    // adapter: FirestoreAdapter(db.app)
}

export default NextAuth(authOptions)

当我使用谷歌proivder,但不是当使用信用,
使用信用卡注册的代码:

const signup = (formdata : FormData) => {
setEmail((formdata.get("email") as string))
setPassword((formdata.get("password") as string))
createUserWithEmailAndPassword(auth, email, password).then(res => {
  console.log(res)
});
router.push("/dashboard")

};
注册提供商:function Signup(提供商:string){ signIn(provider)} // provider是名称:谷歌,github,discord

omtl5h9j

omtl5h9j1#

对于任何发现这个的人,你不能使用适配器与CredentialsProvider,如这里所述:https://next-auth.js.org/providers/credentials
你将需要使用其他供应商,如谷歌或电子邮件,
如果这不是你想要的,这里有一个用firestore创建用户的示例代码,其中文档名是用户ID。

// signup function

async function signup(formdata : FormData) {
    let user = null
    setEmail((formdata.get("email") as string))
    setPassword((formdata.get("password") as string))
    await createUserWithEmailAndPassword(auth, email, 
    password).then(res => {
      user = res.user
    });
    create_user(user)

    await signIn('credentials', {
      email: email, 
      password: password,
      redirect: true, 
      callbackUrl: '/dashboard'}
    )
  };

// firestore create user document with uid as doc id

export function create_user(user : User) {
    const base_user : ScalarUser = {
        email: user?.email, 
        photoURL: user?.photoURL || "", 
        displayName: user?.displayName ||  "",
    } 
    
    setDoc(doc(db, 'Users', user.uid), base_user, { merge: true })
}

相关问题