5

我尝试使用 Nuxt Auth 模块设置 google 身份验证,但我从 google 收到以下错误:

Error 400 : invalid_request
Parameter not allowed for this message type: nonce

这是我的配置

// nuxt.config.js
modules: ["@nuxtjs/axios", "@nuxtjs/auth-next"],
auth: {
  router: {
    middleware: ["auth"],
  },
  redirect: {
    login: "/login",
    logout: "/",
    callback: false,
    home: "/",

  },
  strategies: {
         google: { clientId: "MyClientID", codeChallengeMethod: "" }
  }
}

以及我如何在我的组件中调用 google auth:

login(){
   this.$auth.loginWith("google").then( result => console.log(result) )
}

我也尝试从这里运行官方演示: https ://github.com/nuxt-community/auth-module/tree/dev/demo 但我得到了同样的错误。

4

3 回答 3

3

有同样的问题,但设置responseType: 'code'对我有用。

编辑:设置responseType: "id_token token"式授权流程并使用 Google 的访问令牌重定向到您的 Nuxt 应用程序。整个 OAuth 主题对我来说一直很困惑,并且在安全性方面有太多关于该做什么和不该做什么的错误信息。我发现以下文章非常有帮助,并揭开了各种 OAuth 流程的神秘面纱:https ://itnext.io/an-oauth-2-0-introduction-for-beginners-6e386b19f7a9但是,如果您不想公开访问权限前端的令牌,而不是在后端获取它,那么您必须通过设置使用代码授权流程responseType: "code"并正确设置后端。我最终使用了代码授权流程,但我假设大多数人发现隐式授权流程更方便。

这是完整的片段:

export default {
  modules: ["@nuxtjs/axios", "@nuxtjs/auth-next"],
  auth: {
    strategies: {
      google: {
        clientId: process.env.GOOGLE_CLIENT_ID,
        redirectUri: `${process.env.BASE_URL}/auth/google/callback`,
        codeChallengeMethod: "",
        responseType: "id_token token",
      },
    },
  },
  router: {
    middleware: ["auth"],
  },
};
于 2021-04-28T22:00:35.140 回答
0

似乎与 Nuxt Auth 的版本有关。

也许这个功能还没有准备好@nuxtjs/auth-next

所以我跑

npm install @nuxtjs/auth@latest --save

然后更新 nuxt.config.json

  1. 替换@nuxtjs/auth-next@nuxtjs/auth
  2. 替换clientIdclient_id
// nuxt.config.js
modules: ["@nuxtjs/axios", "@nuxtjs/auth"],
auth: {
  router: {
    middleware: ["auth"],
  },
  redirect: {
    login: "/login",
    logout: "/",
    callback: false,
    home: "/",

  },
  strategies: {
         google: { client_id: "MyClientID"}
  }
}
于 2021-01-24T18:46:20.857 回答
-1

在 auth-next 和 auth0 中responseType让我绕过问题的设置,我的工作配置如下所示:

auth0: {
  logoutRedirectUri: process.env.BASE_URL,
  domain: String(process.env.AUTH0_DOMAIN).replace(/(^\w+:|^)\/\//, ''),
  clientId: process.env.AUTH0_CLIENT_ID,
  scope: ['read:reports', 'read:roles', 'create:client_grants', 'offline_access'], // 'openid', 'profile', 'email' default added
  audience: process.env.AUTH0_AUDIENCE,
  responseType: 'token',
  accessType: 'offline',
  grantType: 'client_credentials',
  redirectUri: process.env.BASE_URL + '/callback',
  codeChallengeMethod: 'S256'
}
于 2021-04-11T09:06:53.800 回答