我想在我的mean-stack应用程序中添加一个login with Microsoft
按钮。所以我使用passport-microsoft。
使用passport.authenticate('microsoft', { scope: ['User.Read'] })
,我可以获得以下信息:@odata.context
,givenName
,surname
,displayName
id
,{{1} },userPrincipalName
,businessPhones
,jobTitle
,mail
,mobilePhone
,officeLocation
。对我而言,我的preferredLanguage
是一个电子邮件地址,而我的userPrincipalName
是mail
。
我已按如下方式设置应用程序,但如果我写null
,则身份验证会给我一个“无效范围”错误。
有谁知道如何设置我的应用程序并请求获取用户的电子邮件地址?
答案 0 :(得分:0)
如果你看the documentation for the user
object,你会发现以下内容:
邮件强>
字符串
用户的SMTP地址,例如, " jeff@contoso.onmicrosoft.com" ;.只读。支持$ filter。
<强>的UserPrincipalName 强>
字符串
用户的用户主体名称(UPN)。 UPN是一个 基于Internet标准的用户的Internet样式登录名 RFC 822. 按照惯例,这应该映射到用户的电子邮件名称。 一般格式是别名@ domain,其中domain必须存在于 租户的已验证域名集合。此属性是必需的 创建用户时租户的经过验证的域名可以是 从组织的verifiedDomains属性访问。支持 $ filter和$ orderby。
因此,mail
属性似乎不一定代表用户的电子邮件地址,但专门用于Outlook和Office 365.在创建用户时,它也不是必需的属性。相反,您应该依赖userPrincipalName
作为用户的电子邮件。
至于您对范围的错误,您应该共享完整的错误消息。