SSO 身份验证
单点登录(Single Sign-On,SSO)为你的用户预授权访问 Ducalis 投票看板,无需单独登录。你将准确知道每个想法是由谁提交的。
👀 实时演示:登录到 Ducalis,然后访问 https://feedback.ducalis.io/Ducalis-roadmap/summary。你将看到相同的登录信息、邮箱、姓名、头像和公司名称自动应用。
为什么使用 SSO
识别用户:了解每条想法由谁提交,为反馈提供了必要的背景信息。SSO 确保你准确知道哪些用户提供了哪些反馈。
私有投票看板需要 SSO。小组件会在显示任何内容之前验证每个用户的身份和权限。如果没有 SSO,小组件将无法为任何人加载。
无缝体验:用户无需单独登录即可提交想法或投票。他们可以一键订阅你的产品更新日志。
安全性:身份验证可保持对话私密并防止身份冒用。我们强烈建议所有 Ducalis 客户启用身份验证。
获取小组件代码
-
前往投票看板 Settings (设置)。
-
选择 Embed (嵌入) 并按照说明操作。
配置身份验证参数
使用 user 参数扩展你的小组件代码:
<script>
!function(b,c,f,d,a,e){b.dclsPxl||(((d=b.dclsPxl=function(){d.callMethod?d.callMethod.apply(d,arguments):d.queue.push(arguments)}).push=d).queue=[],(a=c.createElement("script")).async=!0,a.src=f,(e=c.getElementsByTagName("script")[0]).parentNode.insertBefore(a,e))}(window,document,"https://hi.ducalis.io/js/widget.js")
dclsPxl("initWidget", {
appId: "_YOUR_APP_ID", // Required
boardId: "_YOUR_BOARD_ID", // Required
user: {
// required
email: "Your user Email",
hash: "User hash",
// optional
userID: "Your user ID",
name: "Your user Name",
avatar: "https://you-user-avatar-domain/avatar.png",
company: "Your user Company name",
},
});
</script>
用户参数
email(必需):在你的产品中注册的用户邮箱。用户必须通过双重确认明确订阅更新日志或投票看板更新。邮箱仅对你的 Ducalis 团队成员在看板内可见。
hash(必需):身份安全验证。请参阅下面的 生成用户哈希值。
userID(可选):你的产品中用于已登录用户的唯一标识符。
name(可选):用户在你的产品中的姓名。显示为投票人和想法作者。仅对你的 Ducalis 团队成员在看板内可见。
avatar(可选):用户在你的产品中的头像。在评估反馈时显示在看板中。明确显示谁投了票以及他们投票支持了什么。
company(可选):如果你的产品有分组账户,则为组织名称。建议用于按组织分组查看投票看板请求。
针对个人客户反馈
如果你的反馈主要来自个人用户而不是公司,请使用用户的数据作为 company 参数(例如,用户的姓名或邮箱)。这样你就可以使用公司级数据,其中公司等于用户姓名。
添加自定义字段
为每个投票人添加自定义上下文数据,以获取额外信息,如销售额、ARR 或市场细分。反馈可能因公司规模、市场或客户成熟度而有所不同。
在 Ducalis 中,按这些数据进行细分以更深入地分析用户反馈模式。
使用 company 参数扩展你的小组件代码:
<script>
!function(b,c,f,d,a,e){b.dclsPxl||(((d=b.dclsPxl=function(){d.callMethod?d.callMethod.apply(d,arguments):d.queue.push(arguments)}).push=d).queue=[],(a=c.createElement("script")).async=!0,a.src=f,(e=c.getElementsByTagName("script")[0]).parentNode.insertBefore(a,e))}(window,document,"https://hi.ducalis.io/js/widget.js")
dclsPxl("initWidget", {
appId: "_YOUR_APP_ID", // Required
boardId: "_YOUR_BOARD_ID", // Required
user: {
// required
email: "Your user Email",
hash: "User hash",
// optional
userID: "Your user ID",
name: "Your user Name",
avatar: "https://you-user-avatar-domain/avatar.png",
company: {
id: 123, // Required
name: "My Super Client", // Required
customFields: {
prop1: "Active",
prop2: 1.8
}
}
},
});
</script>
company.id, company.name(必需):传递自定义上下文数据时的必需字段。
customFields:添加任意数量的自定义属性。例如,status: "Active" 或 arr: 50000。
生成用户哈希值
为了让你的用户能够立即为想法投票或在 Ducalis 投票看板上创建想法,请将他们的数据传递给小组件。Ducalis 通过检查哈希密钥以及用户数据来验证用户来自你的网站。
哈希值使用 HMAC 算法和 SHA-256 生成。使用用户的邮箱作为值,使用你的组织的密钥作为密钥。
-
在全局组织设置中找到你的应用密钥:
-
在 https://www.freeformatter.com/hmac-generator.html 检查用户哈希值生成
哈希值生成示例
Node.js:
const crypto = require("crypto");
// Put your secret key here (keep it private!)
// Notice: the one below is an example, yours will be different
const secretKey = "0fd72e0ff53b274293029fd1f3f40c92123123123easf2edq312edwe";
var email = "user@gmail.com";
var hash = crypto.createHmac("sha256", secretKey).update(email).digest("hex");
console.log("hash is:", hash);
PHP:
$secret = '0fd72e0ff53b274293029fd1f3f40c92123123123easf2edq312edwe';
$email = 'user@gmail.com';
$hash = hash_hmac('sha256', $email, $secret);
echo 'Hash is: '. $hash;
使用你自己的域名
默认情况下,你的投票看板位于 hi.ducalis.io 域名下,如 https://feedback.ducalis.io/Ducalis-roadmap/summary。
现代浏览器会阻止跨域 Cookie,如果没有自定义域名,用户识别将无法实现。
为了获得无缝的投票看板体验,请将你的投票看板放置在与你的产品和嵌入小组件的页面相同的二级域名下。这样可以让用户在小组件和投票看板内都保持已识别状态。
请参阅为投票看板设置自定义域名,将你的投票看板地址配置为 ideas.yourcompanyname.com。
跨域身份验证示例
你的域名是 superproduct.com。你的产品运行在 app.superproduct.com,营销页面在 superproduct.com,帮助中心在 help.superproduct.com。将你的 Ducalis 投票看板连接到同一域名,如 voting.superproduct.com。
只有这样,你的所有用户才能在小组件和投票看板中使用相同的凭据进行识别。