【问题标题】:Parse user authenticated using Auth0解析使用 Auth0 进行身份验证的用户
【发布时间】:2016-04-02 06:06:03
【问题描述】:

您好,我正在研究如何同时使用 Parse.com 和 Auth0。

当我使用 Parse.com 设置登录时,会自动设置 currentUser,我可以使用该用户来保存特定于该用户的项目。但是当我使用 Auth0 实现身份验证时,当您执行成功登录时,Auth0 会使用用户信息(Auth0 令牌、fb 访问令牌等)进行响应,当然没有创建 Parse 用户。那么需要采取哪些步骤来使用 Parse 提供的 'currentUser' 对象,但使用 Auth0 提供的身份验证呢?那么如何在解析时创建/保存新用户?

【问题讨论】:

  • 为什么两者都需要?你不能只使用 Parse 吗?
  • Auth0 带有更多的身份验证选项,如 touchID 等。

标签: ios swift parse-platform access-token auth0


【解决方案1】:

你试过this rule for Parse吗?

function(user, context, callback) {
  // run this only for the Parse application
  // if (context.clientID !== 'PARSE CLIENT ID IN AUTH0') return callback(null, user, context);

  var PARSE_APP_ID = 'PLACE HERE YOUR PARSE APP ID';
  var PARSE_API_KEY = 'PLACE HERE YOUR PARSE REST API KEY';
  var PARSE_USER_PASSWORD = 'PARSE_USER_MASTER_KEY'; // you can use this to generate one http://www.random.org/strings/

  var username = user.email || user.name || user.user_id; // this is the Auth0 user prop that will be mapped to the username in the db

  request.get({
    url: 'https://api.parse.com/1/login',
    qs: {
      username: username,
      password: PARSE_USER_PASSWORD
    },
    headers: {
      'X-Parse-Application-Id': PARSE_APP_ID,
      'X-Parse-REST-API-Key': PARSE_API_KEY
    }
  },
  function (err, response, body) {
    if (err) return callback(err);

    // user was found, add sessionToken to user profile
    if (response.statusCode === 200) {
      user.parse_session_token = JSON.parse(body).sessionToken;
      return callback(null, user, context);
    }

    // Not found. Likely the user doesn't exist, we provision one
    if(response.statusCode === 404) {
      request.post({
        url: 'https://api.parse.com/1/users',
        json: {
          username: username,
          password: PARSE_USER_PASSWORD
        },
        headers: {
          'X-Parse-Application-Id': PARSE_APP_ID,
          'X-Parse-REST-API-Key': PARSE_API_KEY,
          'Content-Type': 'application/json'
        }
      },
      function (err, response, body) {
        if (err) return callback(err);

        // user created, add sessionToken to user profile
        if (response.statusCode === 201) {
          user.parse_session_token = body.sessionToken;
          return callback(null, user, context);
        }
        return callback(new Error('The user provisioning returned an unkonwn error. Body: ' + JSON.stringify(body)));
      });
    }
    else
    {
      return callback(new Error('The login returned an unkonwn error. Status: ' + response.statusCode + 'Body: ' + body));
    }
  });
}

【讨论】:

  • 这对任何人都有效吗?我在使其与在 AWS 上运行的 Parse 一起工作时遇到问题。在获取失败时进行单独调用获取/发布工作不会。见这里stackoverflow.com/questions/40875328/…
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2016-11-15
  • 2015-06-29
  • 2018-03-20
  • 2019-06-29
  • 2018-06-01
  • 1970-01-01
相关资源
最近更新 更多