- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想为我网站上的每个用户创建一个公开的个人资料页面。与 SO 用户配置文件非常相似的东西。但我不想公开我用作 PK 的 Guid。我也不知道在网站的整个生命周期中在 url 中使用用户名会有多独特。
问题是 SO 本身如何在 url https://stackoverflow.com/users/242506/nubm 中执行此操作?可以删除用户名并且 url 仍然有效,但我是否应该在我的 Guid 旁边生成一些可公开查看的 UserId,我可以在指向个人资料页面的链接中使用它并在 url 中显示它?
我发现了类似的问题Should I expose a user ID to public?或 How do I create a "public" user profile page in ASP.NET (3.5)但它们并不是我想知道的。
最佳答案
你可以做两件事。
首先,您可以在数据库上创建一个额外的增量 ID,可以是在 ASP.NET 表上,也可以是一个新的映射表,并提供一个较小的数字连接到 Guid。为什么要少一些?因为 Guid 是 128 位并且太大而不能像在 url 上那样使用。
然后,您可以在 url 上使用与 Guid 关联的这个较小的数字。这里唯一的漏洞利用问题是任何人都可以找到您的所有用户列表。所以有这个公开所以如果你也公开它们就不是问题。所以使用他们 URL 中的数字来查找用户,用户名是为了更好的 SEO。号码保持不变,但名称可以更改,因此仅使用号码来定位用户。
第二种方案是将128位的Guid号压缩编码为73位的字符串。我选择了 73 个基本字符,因为 73 是 url 上允许的非转义字符。
以下是我发现的一些用于进行此转换的示例:
http://jopinblog.wordpress.com/2009/02/04/a-shorter-friendlier-guiduuid-in-net/
http://buildmaestro.wordpress.com/2011/04/27/installscript-to-transform-guid-into-compressed-guid/
简单转换为 base64(来自 Dave Transoms)
public static string Encode(Guid guid)
{
string encoded = Convert.ToBase64String(guid.ToByteArray());
encoded = encoded
.Replace("/", "_")
.Replace("+", "-");
return encoded.Substring(0, 22);
}
public static Guid Decode(string value)
{
value = value
.Replace("_", "/")
.Replace("-", "+");
byte[] buffer = Convert.FromBase64String(value + "==");
return new Guid(buffer);
}
关于c# - 公开个人资料的公开可见 UserId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10583479/
我正在使用passport.js 为我的node.js 应用程序提供OAuth 身份验证。但我确实有一个疑问: 当我在身份验证时收到配置文件对象(当您定义 OAuth 策略时)时,该对象对于所有提供商
我正在尝试对 wordpress 布局进行解码/逆向工程。我正在浏览 CSS 文件,无法弄清楚这个长长的菜单 mumbo-jumbo 是什么! 我不是要任何人检查代码,而是让我知道我在看什么。这些似乎
所以我尝试制作一个包含私有(private)配置文件的 symfony 项目,并且我使用 FriendsOfSymfony,但是如果我创建两个用户,每个人都可以看到其他人上传的文件。我尝试在多个网站上
我正在编写一个需要使用已登录 G+ 用户的公开个人资料图片的 JS 应用。 如果我有用户 ID,我可以使用 Google+ API 查询个人资料数据。 https://developers.googl
我看过很多关于 facebook 身份验证的帖子,要么是旧的,要么不能正常工作。 然而,最终我在我的项目中做了一些可行但不完全的东西。这是我要求的代码 var facebookAuth
我是一名优秀的程序员,十分优秀!