Azure BotBuilder - Как получить информацию о пользователях из настроек соединения OAuth - PullRequest
0 голосов
/ 30 августа 2018

Я создал бота веб-приложения Azure и добавил параметр подключения OAuth, который переводит пользователя в Salesforce. Все работает хорошо, я могу аутентифицировать пользователя через своего бота, а также получить токен доступа от Salesforce.

Проблема Может ли кто-нибудь помочь мне получить информацию о пользователях от Salesforce? Потому что я могу получить токен доступа один и не уверен, как получить идентификатор пользователя из Salesforce.

Я написал следующий код,

var salesforce = {};

salesforce.signin = (connector, session, callback) => {
    builder.OAuthCard.create(connector,
        session,
        connectionName,
        "Sign in to your Salesforce account",
        "Sign in",
        (createSignInErr, createSignInRes) => {
            if (createSignInErr) {
                callback({
                    status: 'failure',
                    data: createSignInErr.message
                });
                return;
            }

            callback({
                status: 'success',
                data: createSignInRes
            });
        });
};

salesforce.getUserToken = (connector, session, callback) => {
    connector.getUserToken(session.message.address,
        connectionName,
        undefined,
        (userTokenErr, userTokenResponse) => {
            if (userTokenErr) {
                callback({
                    status: 'failure',
                    data: userTokenErr.message
                });
                return;
            }

            callback({
                status: 'success',
                data: userTokenResponse
            });
        });
};

salesforce.accessToken = (connector, session, callback) => {
    salesforce.getUserToken(connector, session, (userTokenResponse) => {
        if (userTokenResponse.status == 'failure') {
            // If the user token is failed, then trigger the sign in card to the user.

            salesforce.signin(connector, session, (signinResponse) => {
                // If the sign in is failed, then let the user know about it.

                if (signinResponse.status == 'failure') {
                    session.send('Something went wrong, ', signinResponse.message);
                    return;
                }

                // If the sign in is success then get the user token and send it to the user.
                salesforce.getUserToken(connector, session, (newUserTokenResponse) => {
                    if (newUserTokenResponse.status == 'failure') {
                        session.send('Something went wrong, ', newUserTokenResponse.message);
                        return;
                    }

                    callback(newUserTokenResponse);
                    return;
                });
            });
        }

        callback(userTokenResponse);
    });
};

Я могу получить userTokenResponse здесь. Но мне нужен идентификатор пользователя Salesforce, чтобы я мог начать взаимодействовать с Salesforce от имени пользователя.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вам не нужен идентификатор пользователя, чтобы получить информацию о пользователе, для которой достаточно accessToken. Я установил jsforce и использовал приведенный ниже код для получения идентификационной информации.

Решено,

    const jsforce = require('jsforce');
    var connection = new jsforce.Connection({
            instanceUrl: instanceUrl,
            sessionId: accessToken
        });

        connection.identity((error, response) => {
            if(error) {
                callback({
                    status: 'failure',
                    message: error.message
                });
                return;
            }

            callback({
                staus: 'success',
                data: response
            });
        });
0 голосов
/ 30 августа 2018

Если у вас есть только токен доступа OAuth, вы можете запросить информацию о пользователе, вызвав http GET против:

https://login.salesforce.com/services/oauth2/userinfo для PROD или https://test.salesforce.com/services/oauth2/userinfo для песочницы

Добавить только Authorization: Bearer Y0UR0AUTHTOKEN в заголовок запроса HTTP GET.

Исходя из моего недавнего теста, результат, полученный с сервера, выглядит следующим образом:

{
    "sub": "https://test.salesforce.com/id/[organizationid]/[userId]",
    "user_id": "000",
    "organization_id": "000",
    "preferred_username": "me@mycompany.com",
    "nickname": "myNick",
    "name": "name lastname",
    "urls": {
        ...
    },
    "active": true,
    "user_type": "STANDARD",
    ...
}
...