gpt4 book ai didi

c# - 在运行时更改成员身份提供程序 ApplicationName。如何?

转载 作者:太空狗 更新时间:2023-10-29 20:28:54 26 4
gpt4 key购买 nike

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

我将 ASP.NET MVC 3 EF4 与自定义成员资格、角色、配置文件提供程序一起使用。

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

我有一个自定义授权属性,用于检查用户所处的角色,但现在我需要实现一个自定义 IPrincipal,因为我需要传递一个用户类型。唯一的问题是我在哪里存储它? session ?

最初我认为这就是 Application 表的用途,我在这方面取得了短暂的成功,但读到有线程问题,而且我到处都遇到 session 错误,这不是很好 :(

我想知道最好的方法是什么,因为我不能在提供者中使用覆盖的方法,因为我必须向某些方法添加 UserType 参数,但这会破坏提供者的功能.

编辑:我基本上需要能够在运行时以编程方式更改 ApplicationName。我尝试这样做,唯一的问题是当我停止我的开发服务器但让我的浏览器保持打开状态然后再次运行我的开发服务器时它不会保留应用程序名称。

编辑:我已将我的应用程序更改为使用 OAuth,但我从未找到好的解决方案。

最佳答案

I basically need to have the ability to change the ApplicationName at runtime pro-grammatically. I tried doing this, the only problem was when I stopped my development server but left my browser open then ran my dev server again it wouldnt keep the application name.

如果您需要更改 ApplicationName,这意味着您需要在运行时选择一个提供者。唯一的方法是不使用单例“成员身份”,因为它使用 web.config 中定义的提供者。

相反,每次您需要您的提供商时,请使用:

MembershipProvider userProvider = Membership.Providers[UserProviderName];

只需按照您想要的方式设置 UserProviderName 即可。我会使用自定义全局授权或 preAction 过滤器,它从某些 cookie 或其他 session 变量中检测提供者,并将提供者放入 HttpContextBase.Items 集合中,该集合仅针对一个请求。

关于c# - 在运行时更改成员身份提供程序 ApplicationName。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com