Профиль членства ASP в ColdFusion

Я пытаюсь воспроизвести функциональность профиля членства ASP в ColdFusion. В основном я хочу иметь возможность получать и сохранять значения свойств.

Чтобы понять мою основную потребность, у меня есть следующее:

table: aspnet_Profile
UserID | PropertyNames | PropertyValuesString |...| LastUpdatedDate
xyzxyz | FirstName:S:0:5:LastName:S:5:1: | SollyM |...| 2013-01-01 00:00:00.000

Теперь, используя ASP.net, использование profile.GetPropertyValue("FirstName") вернет Solly, а profile.GetPropertyValue("LastName") вернет M.

Интерпретация PropertyNames:

LastName => PropertyName
S => String
5 => Starting Position
1 => Length

Чтобы сохранить новый LastName, вы используете profile.SetPropertyValue("LastName","de Mots"), и таблица будет такой, как показано ниже:

table: aspnet_Profile
UserID | PropertyNames | PropertyValuesString |...| LastUpdatedDate
xyzxyz | FirstName:S:0:5:LastName:S:5:7: | Sollyde Mots |...| 2013-01-02 00:00:00.000

Как я могу воспроизвести это в ColdFusion?

Я пробовал это более 2 дней.


person RealSollyM    schedule 24.06.2013    source источник
comment
Эти данные профиля хранятся в базе данных?   -  person Miguel-F    schedule 24.06.2013
comment
да. Это я пытался воспроизвести таблицу aspnet_Profile в MSSQL. PropertyNames и PropertyValueString относятся к типу NTEXT. UserID — это UNIQUEIDENTIFIER, а LastUpdatedDate — это DateTime (о чем я не беспокоюсь). ... представляют столбец, который я не использую.   -  person RealSollyM    schedule 24.06.2013
comment
ColdFusion имеет интеграцию с .NET, если вы можете использовать это . Или вы вообще уходите от .NET?   -  person Miguel-F    schedule 24.06.2013
comment
Отлично. Нет, я не убегаю от него. Фактически, я пишу .NET-версию нашей внутренней системы CF, и все функции, связанные с членством в .NET, я должен реплицировать в CF без использования дополнительных таблиц.   -  person RealSollyM    schedule 24.06.2013
comment
Кажется, я не могу использовать методы профиля из .NET. 100 : ‹cfobject type=.NET name=profileBase 101 : class=System.Web.Profile› 102 : ‹cfset profile = profileBase.Create(Username) ›) Ошибка: Класс System.Web.Profile не найден в указанном списке сборок. Сначала я попробовал это с class="System.Web.Profile.ProfileBase".   -  person RealSollyM    schedule 24.06.2013
comment
Вы пытались указать assembly и указать его на правильную DLL? Читайте об этом по ссылке, которую я дал ранее.   -  person Miguel-F    schedule 24.06.2013
comment
Я продолжаю получать ту же ошибку, и на этот раз я даже указал фактический файл сборки. Сборка Web.Security=C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll› 103 : ‹cfset user = member.GetUser(Username) › 104 : ‹cfoutput›UserID = #user.ProviderUserKey #‹/cfoutput› ‹br /› Пожалуйста, помогите!   -  person RealSollyM    schedule 25.06.2013
comment
давайте продолжим это обсуждение в чате   -  person RealSollyM    schedule 25.06.2013


Ответы (1)


Наконец-то я написал свой собственный CFC, и его можно загрузить с http://collabedit.com/7xmca.

Есть 3 функции:

  1. PasswordEncrypt => Это один из тех запросов, с которыми мне пришлось столкнуться при хешировании пароля в CFM, чтобы он соответствовал запросу членства.

  2. ProfileGet("UserId","PropertyName") => возвращает значение имени свойства.

  3. ProfileSet("UserId","PropertyName","NewPropertyValue") => обновляет PropertyName на NewPropertyValue.

Обратите внимание, что ProfileGet и ProfileSet относятся только к PropertyValuesString, а не к PropertyValuesBinary профиля. Вы можете расширить это, чтобы получить столько.

person RealSollyM    schedule 25.06.2013
comment
Спасибо за публикацию вашего решения. В окончательной версии обязательно var/local охватите все локальные переменные функции. В противном случае вы столкнетесь со странными проблемами с потоками, если cfc хранится в общей области. Кроме того, обязательно используйте cfqueryparam для предотвращения внедрения sql. - person Leigh; 25.06.2013
comment
Не могли бы вы перейти по ссылке, указанной в моем ответе, и обновить код? Вам не нужно будет входить в систему. Я думаю, он запросит ваше имя и адрес электронной почты, и вы сможете редактировать файл. - person RealSollyM; 26.06.2013
comment
Я собирался это сделать, но.. У меня нет доступа к таблицам sql на этой неделе, и я не хотел нарушать рабочий код непреднамеренной опечаткой ;). - person Leigh; 26.06.2013