Служба аутентификации Webhook (конечная точка) в MongoDB Stitch - PullRequest
0 голосов
/ 28 ноября 2018

Есть ли способ создать сервисный веб-крючок для регистрации нового пользователя с помощью электронной почты и пароля?

Я вижу путь через SDK, но пытаюсь сделать то же самое с помощью функции веб-крючка службы *

например,

exports = function(payload) {

 const { Stitch, AnonymousCredential } = require('mongodb-stitch-server-sdk');

  var queryArg = payload.query || '';
  var body = {};

  if (payload.body) {
  body = EJSON.parse(payload.body.text());
  }

  return body.email;
};

Я не могу получить доступ к mongodb-stitch-server-sdk здесь.Я иду в правильном направлении?

1 Ответ

0 голосов
/ 29 ноября 2018

Так что вы не сможете использовать SDK внутри webhook.Что вы можете сделать, это добавить пользователя, нажав API администратора Stitch.

  1. Создайте ключ API в Atlas.Перейдите в раскрывающемся списке пользователей в верхнем правом углу> Учетная запись> Доступ к публичному API.Нажмите «Создать» и сохраните созданный ключ API.

  2. Создайте службу HTTP в Stitch.

  3. В своем веб-крюкеиспользуйте Admin API для аутентификации и создания нового пользователя.Код будет выглядеть примерно так:

    exports = function(payload) {
        const http = context.services.get("http");
        return http.post({
            url: "https://stitch.mongodb.com/api/admin/v3.0/auth/providers/mongodb-cloud/login",
            body: JSON.stringify({ 
                username: "<atlas-username>",
                apiKey: "<atlas-apiKey>"
            })
        }).then(response => EJSON.parse(response.body.text()).access_token).then(accessToken => {
            return http.post({
                url: "https://stitch.mongodb.com/api/admin/v3.0/groups/<groupId>/apps/<appId>/users",
                headers: {
                    Authorization: ["Bearer " + accessToken]
                },
                body: JSON.stringify({ 
                    email: "<email-from-payload>",
                    password: "<password-from-payload>"
                })
            });
        });
    };
    

После комментария:

const http = context.services.get("http"); должен быть настроен ServiceName вместоhttp как const http = context.services.get("<SERVICE_NAME>");

...