我需要一个更好的建议来处理具有OpenID成员身份的自定义用户属性

时间:2010-07-12 23:44:50

标签: asp.net asp.net-mvc-2 asp.net-membership

我使用DotNetOpenAuth作为我的会员系统,现在我的工作方式似乎运作得很好。然而,我想要做的是在我的网站中构建针对AuthCookie而不是会话检查用户凭据的能力。

在会员提供商中,我可以检查这样的用户名

    string UserName = System.Web.HttpContext.Current.User.Identity.Name; 
    ''# which returns the OpenId ClaimedIdentifier

我想知道的是,是否有办法对此进行扩展,以便我可以从AuthCookie中检索自定义属性,而不必创建自己的会话对象。


目前我有这个设置。

UserSessionModal

Namespace Domain
    Public Class UserSessionModel
        Public Property ID As Integer
        Public Property RegionID As Integer
        Public Property Username As String
        Public Property Slug As String
        Public Sub New(ByVal user As User)
            _ID = user.ID
            _RegionID = user.RegionID
            _Username = user.UserName
            _Slug = Replace(user.UserName, " ", "-")
        End Sub
    End Class
End Namespace

BaseController (由所有控制器继承)

Protected Overrides Function CreateActionInvoker() As System.Web.Mvc.IActionInvoker

    ''# Create a UserInfo object for the logged in user
    ''# and store it in a session state.
    If Session("UserInfo") Is Nothing AndAlso User.Identity.IsAuthenticated Then

        Dim user As Domain.UserSessionModel = New Domain.UserSessionModel(OpenIdService.GetOpenId(HttpContext.User.Identity.Name).User)
        Session("UserInfo") = user
    End If

    Return MyBase.CreateActionInvoker()
End Function

然后在我的观点中,我做了类似的事情

<%  
    Dim user As MyApp.Core.Domain.UserSessionModel = DirectCast(Session("UserInfo"), MyApp.Core.Domain.UserSessionModel)
%>
<%: Html.ActionLink(user.UserName, "Details", "Users", New With {.id = user.ID, .slug = user.Slug}, Nothing)%>

我真正需要做的就是一起删除会话内容,只需检查AuthCookie以获取我的自定义属性IDRegionIDUsername和{{ 1}}。

我已经可以使用Slug从AuthCookie中获取“ClaimedIdentifier”...我只需要能够扩展它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这个问题似乎只是this questionmy answer的不同表达方式。

干杯。