使用 Microsoft 标识检索连接到 Azure 应用服务的用户的电子邮件

问题描述

我们如何获取使用 Microsoft Identity 连接到 Azure 应用服务的用户的电子邮件

我们的前端构建在 React 之上,而我们的后端构建在 Node.js 之上。

谢谢, 克里斯托夫

解决方法

最后,调用 /.auth/me REST 端点以从响应数据中检索用户声明就足够了。

import axios from "axios";

const _ = require("lodash");

export function hasRoleReaders(userDetails) {
    return hasRole(userDetails,"readers");
}

export function hasRoleWriters(userDetails) {
    return hasRole(userDetails,"writers");
}

function hasRole(userDetails,expectation) {
    const found = _.find(userDetails.roles,function (role) {
        return role.val === expectation;
    });

    return found !== undefined;
}

export async function getUserDetails() {
    return axios.get("/.auth/me")
                .then(response => {
                    const datum = response.data[0];

                    const userId = datum.user_id;
                    const userClaims = datum.user_claims;
                    const name = _.find(userClaims,function (userClaim) {
                        return userClaim["typ"] === "name";
                    });
                    const roles = _.filter(userClaims,function (userClaim) {
                        return userClaim["typ"] === "roles";
                    });

                    return {
                        "userId": userId,"name": name,"userClaims": userClaims,"roles": roles
                    };
                })
                .catch(reason => {
                    console.log(reason);

                    return {
                        "userId": "na","name": "na","userClaims": [],"roles": []
                    };
                });
}