0

Чтобы понять это, и не заставляйте кого-либо читать длинное объяснение, я знаю, что есть проблемы с дефолтами безопасности Microsoft, когда дело доходит до многих его технологий. Я использую ASP.NET и MVC и на самом деле был готов использовать стандартные значения по умолчанию для Microsoft (например, IdentityService) - и изучал его более сложные функции, поэтому я могу их освоить. Но затем я наткнулся на сообщение Брок Аллена в блоге - где он объяснил, что умолчания Microsoft в этих отношениях просто недостаточно хороши. Так вот, где я узнал о его проекте MembershipReboot.brockallen.MembershipReboot подтверждение учетной записи не работает

Я занимаюсь реализацией этой библиотеки, сначала с не таким большим успехом, но набираю силу и добился определенных успехов. Я пошел от него, не работая вообще, чтобы иметь проблемы. Я исправил все это (с небольшой помощью). Теперь страницы входа и регистрации работают, и регистрация работает, а также отправка проверочных писем, все они работают. Вот где я сейчас застрял. Получив подтверждение по электронной почте и нажав ссылку в письме, я перехожу на страницу localhost: ####/ChangeEmail/(контрольный ключ), и это моя новая проблема. Я использую код, взятый из кода примера (SingleTenant).

Когда он переходит на эту страницу, в настройке по умолчанию он сказал мне, что у него есть «System.ArgumentException: account», и он указал на код «if (account.HasPassword())» в Confirm ActionResult ChangeEmailController. Я добавил строку кода выше, что если оператор в этом ActionResult - «Перенаправление (« http: // »+ account.Email); - просто посмотреть, что с этим делать. С этим дополнением он дал мне другую (связанную) ошибку - «Ссылка на объект не установлена ​​в экземпляр объекта». и он указал на тот точный код, который я добавил.

Таким образом, это действительно меня разочаровывает, очевидно, что система работает при загрузке библиотеки, она работает, позволяя фактически зарегистрировать пользователя, она работает, когда вы можете отправить электронное письмо с надлежащим ключом проверки (я сравнил это к записи базы данных, это был тот же код). Но затем, когда нажата ссылка на метод проверки, она не хочет извлекать те же данные учетной записи из базы данных. Я нахожу это довольно странным.

+0

Вы должны оставить свой код, чтобы мы могли рассказать вам, где проблема. – KenL

ответ

0

(Пожалуйста, извините меня за мое небольшое длинное введение того, что приводит к фактическому ответу на вопрос, о котором я просил, , если вы не хотите читать объяснение того, как я попал на фактический ответ, тогда пропустите следующие два абзаца и прочитайте третий следующий абзац (и все под ним), в котором содержится фактический ответ)

Я также разместил этот вопрос на странице GitHub (проблем) библиотеки. Здесь (в stackoverflow) - никто не смог дать никаких предложений. Это прекрасно, потому что автор библиотеки очень помог. После того, как кто-то вернулся с ним, мы смогли решить мои проблемы и выяснить, что именно это вызвало проблему.

Чтобы быть честным с библиотекой и автором, это была не обязательно сама библиотека, которая виновата. Более того, тот факт, что автор живет напряженной жизнью (как и большинство из нас) и не смог написать очень углубленную документацию для разработчиков всех полос (включая тех, кто может не сразу понять, как сделайте это, просто посмотрев на его документацию. У меня есть довольно много опыта в разработке программного обеспечения (как хобби), но я определенно все еще нахожусь в процессе изучения некоторых вещей, которые мне нужно знать (я намереваюсь получить сертификат Microsoft , и я его изучаю)).

Фактический ответ на вопрос: В принципе говоря, это просто так получается, главное, что у меня эта проблема действительно имеет дело с самим ключом проверки. Я предположил - как со многими библиотеками, и даже с тем, что можно найти в ASP по умолчанию.NET (в том числе стандартная система идентификации, предоставляемая Microsoft) - получение фактического ключа проверки выполняется так: «var key = account.VerificationKey;» - но автор библиотеки показал мне, чтобы получить правильный ключ проверки, который фактически связан с создаваемой учетной записью (и его система включает в себя расширенную форму хэширования, кстати (довольно впечатляюще)) - мне пришлось использовать систему обработки событий - потому что в его библиотеке используется система «Bus Bus». У меня довольно много знаний в WebForms, и мне становится удобно с MVC. Я понимаю, что C#, и многие из его функциональных возможностей в приличной степени, но это может быть немного неловко, но я никогда (до этого) не имел опыта работы с Event Handling - и на самом деле я счастлив, что эта библиотека заставила меня немного поучаствовать в этом. Это то, что говорит автор о том, как идти об этом (и других связанных вещах, касающиеся его библиотеке можно сделать аналогичным образом):

«Что-то вроде этого:

public class CustomEmailEventHandler : IEventHandler<AccountCreatedEvent<UserAccount>> 
    { 
     public void Handle(AccountCreatedEvent<UserAccount> evt) 
     { 
      // send evt.VerificationKey to evt.Account.Email 
     } 
    } 

, а затем зарегистрировать его МР конфигурации:.

var config = new MembershipRebootConfiguration(); 
config.AddEventHandler(new CustomEmailEventHandler()); 

это примерно его вы должны были бы осуществить дополнительные IEventHandler для других событий, которые ухаживают о здесь: https://github.com/brockallen/BrockAllen.MembershipReboot/blob/master/src/BrockAllen.MembershipReboot/AccountService/UserAccountEvents.cs "

Как я уже сказал, он сказал, что его документация действительно упоминала об этом, но это было не очень ясно. Как только он открыл это мне, я вернулся к своей документации, я узнал - для реализации var «config» (который он описал в ответе, который я только что процитировал) - это должно быть сделано с DI, как и Ninject, так:

kernel.Bind<MembershipRebootConfiguration>().ToConstant(config); 

Наконец, я должен добавить, что автор был очень полезным, и его библиотека, безусловно, впечатляет. Я попросил его ответить на этот вопрос здесь, и он сказал мне идти вперед и делать это сам, поэтому я ответил на него здесь, используя информацию, которую он мне предоставил.

Смежные вопросы