Я использую 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 на мои пользовательские свойства ID
, RegionID
, Username
и Slug
.
Я уже могу получить "ClaimedIdentifier" из AuthCookie, используя HttpContext.User.Identity.Name
... Мне просто нужно иметь возможность его расширить.
Заранее спасибо.