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");
}
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");
}