Я пишу веб-приложение для клиента. У пользователей будет одноразовый ключ, который они будут использовать для первоначальной идентификации себя в приложении. Как только приложение проверит, что ключ действителен, оно переместит их на страницу, где они смогут создать обычную учетную запись для использования при всех последующих входах в систему. Страница создания учетной записи должна быть доступна только после ввода ключа и не должна быть доступна в противном случае. Т.е. он не должен быть доступен пользователям, вошедшим в систему с обычной учетной записью.
Это asp.net 3.0 с использованием специального поставщика членства.
Мой план заключается в создании временной учетной записи на основе ключа и аутентификации пользователя с этой учетной записью. Это позволяет им получить доступ к странице создания пользователя (которая защищена тегом местоположения), где они могут создать официальную учетную запись. Затем я проверяю их подлинность с помощью новой учетной записи и удаляю временную учетную запись.
Поток таков: пользователь переходит на страницу, где вводит ключ. Если ключ действителен, я создаю временную учетную запись, вызываю FormsAuthentication.SetAuthCookie и перенаправляю на страницу создания учетной записи. Это все работает, хотя кажется немного сложным.
Проблема в том, что страница создания пользователя доступна любому аутентифицированному пользователю; Я хочу, чтобы он был доступен только в период между вводом ключа и созданием формальной учетной записи. Поэтому я решил создать специальную роль для временной учетной записи и сделать страницу создания пользователя доступной только для этой роли и ни для кого другого. Я создал свой собственный объект Principal со специальной ролью и попытался установить его, когда аутентифицирую временную учетную запись, но не могу заставить ее работать.
Я действительно надеюсь, что мне не нужно писать собственный поставщик ролей просто для этого.
Как я могу заставить эту работу? Должен быть более простой способ!