IBM Cloud Function for App ID подписаться и забыть пароль

Я могу сгенерировать токен из облака с помощью следующей облачной функции

const main = (params) => {
    return new Promise(function (resolve, reject) {
        request({
            url: credentials.oauthServerUrl + '/token',
            method: 'POST',
            auth: {
                username: credentials.clientId,
                password: credentials.secret
            },
            form: {
                grant_type: "password",
                username: params.uid,
                password: params.pwd
            }
        }, function (error, response, body) {
            resolve(response);
        })
    })
}

Как я могу использовать функции Sign_up и Forgot_password по идентификатору приложения без Node.js SDK и сервера Express. Другими словами, я хотел бы, чтобы мое приложение (SPA) оставалось бессерверным и использовало облачные функции. Я пробовал и читал документы для решения, но пока не повезло (http 404).

Изменить: функция, которую я пытался вызвать страницу забытого пароля, но результатом была ошибка (statusCode 400) "отсутствует перенаправление"

const main = (params) => {
    return new Promise(function (resolve, reject) {
        request({
            url: credentials.oauthServerUrl + '/forgot_password',
            method: 'GET',
            form: {
                client_id: credentials.clientId,
                redirect_uri: "http://www.google.fi"
            }
        }, function (error, response, body) {
            resolve(response);
        })
    })
}

person Jarkko Turpeinen    schedule 15.01.2018    source источник
comment
Хорошо, я продвигаюсь с этим. URL-адрес appid -oauth.eu-gb.bluemix.net/oauth/v3/xxx/cloud_directory/ открывает страницу с запросом электронной почты. Работает при вставке в браузер. Теперь мне нужно заставить его работать из облачной функции, где он жалуется на отсутствие перенаправления.   -  person Jarkko Turpeinen    schedule 15.01.2018
comment
appid-oauthger.ng.bluemagger.ng. / #! / ожидает параметры в строке запроса. Вы можете использовать qs вместо form в вызове request   -  person Frederic Lavigne    schedule 15.01.2018
comment
Спасибо, Фредерик, хороший улов! Теперь это работает. Тогда как насчет регистрации, которая, похоже, не принадлежит API appid -oauth.ng.bluemix.net/swagger-ui/#!/   -  person Jarkko Turpeinen    schedule 15.01.2018
comment
также почему бы просто не перенаправить на URL-адрес приложения напрямую. Вы можете сделать это с помощью веб-действия Cloud Functions и отправки клиенту кода состояния перенаправления.   -  person Frederic Lavigne    schedule 15.01.2018


Ответы (1)


И рабочее решение выглядело следующим образом:

const request = require('request');
const credentials = {
  "version": 3,
  "clientId": "xxx",
  "secret": "xxx",
  "tenantId": "xxx",
  "oauthServerUrl": "https://appid-oauth.eu-gb.bluemix.net/oauth/v3/xxx/cloud_directory/forgot_password"
}
const main = (params) => {
    return new Promise(function (resolve, reject) {
        request({
            url: credentials.oauthServerUrl 
                + '?client_id=' + credentials.clientId 
                    + '&redirect_uri=http://www.my.domain'
                ,
            method: 'GET'
        }, function (error, response, body) {
            resolve(response);
        })
    })
}
person Jarkko Turpeinen    schedule 15.01.2018
comment
а для sign_up существует / oauth / v3 / {tenantId} / авторизация с reponse_type = sign_up. Если response_type равно sign_up, будет получена html-форма регистрации LoginWidget. - person Jarkko Turpeinen; 16.01.2018