Javascript 如何使用auth0 js WebAuth识别新用户?

Javascript 如何使用auth0 js WebAuth识别新用户?,javascript,authentication,auth0,graphcool,Javascript,Authentication,Auth0,Graphcool,我试图保持简单,并使用auth0 js WebAuth对用户进行身份验证。但是,由于涉及重定向,我无法控制注册功能 我的具体用例是使用GraphTool调用createUsergraphql变体来在我的数据库中创建一个用户,但显然,我只想在该用户是新用户时执行此操作 我的问题:使用auth0 js,在从auth0重定向回我的客户端应用程序后(假设身份验证成功),是否可以确定用户是我的客户端应用程序中的新用户还是现有用户 这里有两种通用方法,都要求您在收到Auth0令牌后将其保存在本地存储中。您可

我试图保持简单,并使用auth0 js WebAuth对用户进行身份验证。但是,由于涉及重定向,我无法控制注册功能

我的具体用例是使用GraphTool调用
createUser
graphql变体来在我的数据库中创建一个用户,但显然,我只想在该用户是新用户时执行此操作


我的问题:使用auth0 js,在从auth0重定向回我的客户端应用程序后(假设身份验证成功),是否可以确定用户是我的客户端应用程序中的新用户还是现有用户

这里有两种通用方法,都要求您在收到Auth0令牌后将其保存在本地存储中。您可以为GraphQL客户端使用中间件,该中间件检查本地存储中每个请求的令牌,并将其作为
Authorization:Bearer
标头(如果存在)包含

现在让我们看看这两种方法

始终尝试创建用户 一收到令牌就尝试使用
createUser
变异创建用户是一种相当简单的方法。这就是突变的样子:

mutation signUp($token: String!) {
  createUser(authProvider: {
    auth0: {
      idToken: $token
    }
  }) {
    id
  }
}
现在,如果令牌有效并且与GraphTool中Auth0集成的配置相匹配,则有两种可能的情况。注意,如果所嵌入的
auth0UserId
匹配,则令牌对应于用户

  • 已存在与令牌对应的注册用户。在这种情况下,将返回GraphQL错误
    代码3023:CannotSignUpUserWithCredentialsExist
    (与比较)。在应用程序中,您可以捕获此错误以正常进行

  • 尚未有与令牌对应的注册用户。
    createUser
    变异将返回
    id
    ,一切正常

检查用户是否已登录 如果您有一个更复杂的注册流程,那么您可能希望将用户重定向到注册表单,这在第一种方法中是不可能的。相反,我们可以在继续之前检查当前使用的令牌是否对应于注册用户。您可以使用
user
查询来执行以下操作:

query {
  user {
    id
  }
}
同样,存在与上述相同的两种情况:

  • 已存在与令牌对应的注册用户。在这种情况下,查询返回一个
    user
    对象以及相应的user
    id
    。因此,我们可以在应用程序中正常进行流程

  • 尚未有与令牌对应的注册用户。从
    user
    查询返回的日期将为空,因此我们需要调用
    createUser
    变体,或者切换到注册表单或类似的表单


将其与GraphTool文档中的进行比较。

在这种情况下,最简单的解决方案是使用auth0规则并使用context.stats.loginsCount字段来检测用户是否是新用户。

您可以使用规则在令牌中添加context.stats.loginsCount字段值作为自定义声明。因此,在应用程序中,可以向端点发出HTTP请求以获取令牌数据

function (user, context, callback) {

     const count=context.stats.loginsCount;
     context.idToken["http://mynamespace/logincounts"] = count;


  callback(null, user, context);
}

如果计数等于1,则在数据库中创建用户