2009-10-14 3 views
2

Я пытаюсь вручную внедрить систему входа в ASP.NET 3.5. В основном, при загрузке, я бы хотел, чтобы сайт проверил и посмотрел, активен ли объект пользователя, если нет, чем я хочу, чтобы страница входа в систему появилась.ASP.NET: руководство пользователя для входа в систему, после входа в систему отправьте пользователя обратно на страницу, запрошенную первоначально?

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

, например:

  1. запрос пользователя к: MyPage.aspx - не вошли в систему
  2. страницу входа появляется вместо MyPage.aspx
  3. входа пользователя в успешно
  4. MyPage.aspx появляется вместо of Default.aspx например

Вглядываясь в пространство имен System.Net, я вижу, что существует «класс HttpWebRequest» w hich имеет свойство HttpWebRequest.AllowAutoRedirect, но я не уверен, как это вернет меня с страницы входа.

ПРИМЕЧАНИЕ. Я знаю, что в ASP.NET установлена ​​автоматическая настройка систем аутентификации, но я хотел бы иметь ручное управление базой данных.

- Томек

+0

Что вы подразумеваете под ручным контролем над базой данных? –

+0

Привет, я имел в виду, что если я использую методы аутентификации с ASP.NET и добавлю SQL-сервер в файл Web.Config, он может создать базы данных для вас и как они будут входить в систему. Я никогда не пробовал этого, просто прочитал об этом в MSDN. Кажется здоровым, однако я не думаю, что узнаю многое о безопасности и логинах, если я это реализую. –

ответ

2

Что вы могли бы сделать, если вы не хотите, чтобы на самом деле использовать встроенные в формах Authentcation является:

Проверьте, если пользователь прошел проверку подлинности на каждой странице, которую нужно скрыть от анонимных пользователей. Если они не аутентифицированы, перенаправляйте их на страницу входа с URL-адресом в строке запроса.

if(!HttpContext.Current.User.Identity.IsAuthenticated) { 
    Response.Redirect(~/login.aspx?redirect=this_page.aspx"); 
} 

Затем на странице входа, после входа пользователя в. Проверьте строку запроса, чтобы увидеть, если есть параметр редирект.

if(!String.IsNullorEmpty(Request.QueryString["redirect"]) { 
    string url = ResolveClientURL(redirect); 
    Response.Redirect(url); 
} 

Конечно это все встроенные в .NET с использованием проверки подлинности, где вы можете запретить анонимный доступ к определенным каталогам, и когда вы сделаете это, .NET будет перенаправлять на страницу входа в систему (который установлен в сети .config) и будет включать «ReturnURL = blahblah» на вашей странице входа.

Просто FYI.

+0

JackM, спасибо. Я собираюсь попробовать это. Должен ли я иметь файл Web.Config для любого уровня проверки подлинности, отличный от «Нет»? –

+0

Как вы собираетесь обрабатывать аутентификацию? В .NET вы делаете это, вызывая FormsAuthentication.SetAuthCookie(). –

+0

Я собирался обработать его с помощью объекта Session и пользовательского объекта User, для которого значение var было бы равно true, если логин сравним true через db. –

1

Просто сохраните первоначально запрошенной URL в сессии или скрытое поле на странице входа
После успешного входа в систему, используйте Server.Transfer или Response.Redirect, чтобы перейти на эту страницу.

+1

Хорошая точка. Спасибо ... btw ... БОЛЬШИЕ фотографии ваших путешествий на вашем сайте! Я украл пару горных регионов Перу как личные фоновые изображения. Надеюсь, вы не против. –

0

Похоже, что описан еще один способ: here. Кажется, что вы можете использовать следующий объект для возврата со страницы входа в систему:

FormsAuthentication.RedirectFromLoginPage 

Тем не менее, согласно статье, тем лучше метод использовать то, что описано JackM, но с перегрузкой:

Response.Redirect("~/default.aspx", false); 

При этом вы не можете завершить сеанс, когда страница перенаправляется.

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