NextAuth Google 提供商无法在 Safari 上运行

NextAuth Google provider not working on Safari

google 提供程序在 Chrome 和其他浏览器上运行良好,但无法在 Safari 上运行。我在这里的文档中似乎找不到任何相关内容。

这是我的提供商在 [...nextauth].js 中的声明方式

import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
import GoogleProvider from "next-auth/providers/google";
import FacebookProvider from "next-auth/providers/facebook";

export default NextAuth({
    debug: true,
    providers: [
        GoogleProvider({
            clientId: process.env.GOOGLE_CLIENT_ID,
            clientSecret: process.env.GOOGLE_CLIENT_SECRET,
            state: false,
            authorizationUrl:
        'https://accounts.google.com/o/oauth2/v2/auth?prompt=consent&access_type=offline&response_type=code',
            
        }), ...

函数调用登录Google

async function signInWithGoogle() {
        const res: any = await signIn("google");

        if (res && res.error) {
            setErrorMsg(res.error);
            setShowError(true);
        } else if(!res) {
            router.push("/account-error")
        }
        else {
            router.push("/somepage");
        }
    }

在 Safari 中,res 对象始终未定义。我可以在控制台日志中看到 next auth 能够在 [next-auth][debug][GET_AUTHORIZATION_URL] 中生成有效授权 URL 但是应用不会仅在 Safari 上重定向。

原来在 Safari 上 next auth 没有解决承诺。我删除了检查 res 的代码,它工作正常。它在没有完成使用 google 登录的请求的情况下被重定向。让它留在这里,以防有人遇到这个问题。

所以你的函数调用应该是

async function signInWithGoogle() {
    
     const res: any = await signIn("google");

}