在运行时更改成员资格提供程序ApplicationName.如何去做

本文关键字:程序 ApplicationName 何去做 运行时 成员 | 更新日期: 2023-09-27 17:54:00

我这里有一个独特的情况。我正在做一个web应用程序,将有使用不同的web应用程序凭据登录的能力。例如,您可以登录/注册我的网站,或者您可以登录/注册您的YouTube帐户。我没有使用OpenID,因为我需要在这种情况下访问YouTube的数据。

我正在使用ASP。NET MVC 3 EF4与自定义成员,角色,配置文件提供程序。

问题是用户名不能是唯一的,因为有YouTube用户名的人可能与在我的网站注册的人有相同的用户名。我通过在用户表中指定用户类型来解决这个问题。这是一个复合键(用户id和用户类型)。

我有一个自定义的授权属性来检查用户所处的角色,但是现在我需要实现一个自定义的IPrincipal,因为我需要传递一个用户类型。唯一的问题是我该把它放在哪里?会话吗?

最初我认为这是什么应用程序表是为,我有短暂的成功,但读有线程问题,我得到会话错误的地方,它不是那么伟大的:(

我想知道最好的方法是什么,因为我不能在提供程序中使用重写的方法,因为我必须向一些方法添加UserType参数,但是这会破坏提供程序的功能。

编辑:我基本上需要有能力在运行时按语法更改ApplicationName。我试着这样做,唯一的问题是当我停止我的开发服务器,但离开我的浏览器打开,然后再次运行我的开发服务器,它不会保留应用程序名称。

编辑:我已经改变了我的应用程序使用OAuth,我从来没有找到一个好的解决方案。

在运行时更改成员资格提供程序ApplicationName.如何去做

我基本上需要有能力更改ApplicationName运行时pro-grammatically。我试着这样做,唯一的问题是什么时候我停止了我的开发服务器,但是让我的浏览器打开,然后运行我的开发服务器也不会保留应用程序名称。

如果您需要更改ApplicationName,这意味着您需要在运行时选择一个提供者。要做到这一点,唯一的方法是不要使用单例"Membership",因为它使用了web.config中定义的提供商。

而不是每次你需要你的提供者使用:

MembershipProvider userProvider = Membership.Providers[UserProviderName];

按你想要的方式设置UserProviderName。我会使用一个自定义的全局授权或preAction过滤器,它从一些cookie或其他会话变量中检测提供者,并将提供者放在HttpContextBase中。

这个问题的最佳答案是在stackoverflow上给出的:

区域中具有不同ApplicationName的会员提供程序

下面是他们使用的代码:

Membership.Providers["MyOtherProvider"].ValidateUser(username, pwd);

Ryan,

嗯…您是否可以通过将颁发机构(本地或YouTube)附加到用户名字段本身来解决这个问题…用户名示例:LOCAL/corlettk, YOUTUBE/corlettk ??

好的,你需要一个自定义的Authenticator来拆分复杂字符串,并将登录请求快速传递给适当的底层Authenticator…但一旦完成了这些,(我猜)你就可以轻松地处理授权这个更大的问题了(从你的角度来看)。

我觉得你是个聪明人……你是否已经考虑并摒弃了这种方法?

欢呼。基斯。

PS:是的,我是一个黑客…但我有个坏习惯,就是把有用的东西搞砸……所以他们已经放弃了教育我。