南希的用户信息

时间:2012-01-30 20:24:14

标签: nancy

我正在根据Nancy.Demo.Authentication.Forms敲响一个演示应用。

我正在我的Claims课程中实施UserNameUserIdentity:IUserIdentity,根据演示,我有一个UserModel UserName

SecureModule课程中,我可以看到Context.CurrentUser可用于查看登录的是谁,但根据界面,这仅提供用户名和声明。如果我需要为视图模型获取更多数据(比如登录用户的消息),我可以看到用作db查询的过滤器的是用户名,感觉很好,很奇怪。我宁愿使用用户的uniqueIdentifier。

如果最好将额外的字段添加到我的IUserIdentity实施或UserModel,我认为我想要深究的是什么?在哪里填充这些?

不确定我的问题是否清楚(我的头脑中并不清楚!),但是一些基本的基本架构建议可能会受到影响。

1 个答案:

答案 0 :(得分:11)

对不起延迟回复..此刻忙碌一点:)

IUserIdentity是使用Nancy内置身份验证帮助程序所需的最小接口,您可以实现该功能,并为您的类添加任意数量的附加信息;它类似于标准.net IPrincipal。如果你确实添加了自己的信息,你显然必须转换为你的实现类型来访问其他字段。我们可以添加一个CurrentUser方法来阻止你这么做,但它似乎有点多余。

如果您愿意,可以在这里停止阅读,或者如果您对表格身份验证的工作方式感兴趣,可以继续阅读。

FormsAuth使用IUsernameMapper(现在可能名称错误)的实现来在存储在客户端cookie中的Guid用户标识符和实际用户(IUserIdentity)之间进行转换。值得注意的是,这个GUID需要映射到某个地方的用户/ id,但它不是你的数据库主键,它只是你(可能是可预测的)用户id /名称和“token”之间的间接层。存储在客户端上。虽然cookie是加密的和HMACd(取决于你的配置),如果有人设法破解并重建auth cookie,他们将不得不猜测别人的GUID以冒充他们,而不是更改用户名(到“admin”)或某事(或某事)(或第一位用户为1)。

希望有道理:)