next.js 下一个Auth自定义重定向到子域问题

gcxthw6b  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(113)

我在成功登录后重定向回子域时遇到了nextauth问题。我已经设置了自定义OAuthProvider https://next-auth.js.org/configuration/providers/oauth#using-a-custom-provider我的应用在不同的子域中运行(每个子域使用不同的auth提供程序)
我遇到的问题是,无论我使用什么配置,它都会重定向回.env中为NEXTAUTH_URL设置的URL。因此,当我从subdomain.example.com登录时,它会重定向到example.com。我已经尝试了配置中添加redirect_uri或callBackUrl的所有方法。甚至尝试使用重定向回调。
我使用的是JWT策略,没有定义自定义cookie。
任何帮助将不胜感激!

//Redirect Callback
async redirect({ url, baseUrl }) {
const { hostname } = new URL(url)
const { hostname: baseHostname } = new URL(baseUrl)

if (hostname !== baseHostname) {
Redirect to subdomain
const parts = hostname.split('.')
const subdomain = parts[0] // e.g. 'subdomain'
const domain = parts[1] // e.g. example.com
const newHostname = `${subdomain}.${domain}.com.au`
const newUrl = url.replace(hostname, newHostname)
return Promise.resolve(newUrl)
else {
return Promise.resolve(baseUrl)
       }
     }

字符串

bpsygsoo

bpsygsoo1#

这不是完全相同的用例,但我认为它可能会有所帮助:
我使用signIn()回调根据用户的oauth电子邮件将用户路由到子域:

async signIn(user: any) {
      // get domain from user.email
      // redirect user to emailDomain.yourURL.com
      if (user?.user?.email) {
        const domain = user.user.email.split("@")[1].split(".")[0];
        const nextAuthURL = process.env.NEXTAUTH_URL || process.env.VERCEL_URL;
        // if the url includes slashes, do the below. if not add https:// to it
        const splitURL = nextAuthURL?.split("//");
        if (splitURL && splitURL.length > 1) {
          const urlWithSubdomain =
            splitURL[0] + "//" + domain + "." + splitURL[1];
          const subdomain = new URL(urlWithSubdomain);
          return subdomain.href;
        } else if (splitURL) {
          const urlWithSubdomain = "https://" + domain + "." + splitURL[0];
          const subdomain = new URL(urlWithSubdomain);
          return subdomain.href;
        }
        return true;
      }
      // fallback for credentials users who don't have a user email
      return true;
    }

字符串
在非生产区不起作用。

相关问题