2012-04-10 2 views
0

net mvc 3 application..net mvc form login url перенаправление

У меня проблема с формой входа.

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

первой форма уры это:

http://HOST.com/Login/Login

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

http://HOST.com/Login/Login?ReturnUrl=%2f

редиректа и повторите попытку, затем он вступает в систему правильно. Случается каждый раз.

это мой код формы для формы сечения в моем web.config

<authentication mode="Forms"> 
    <forms loginUrl="Login/Login" timeout="200000" slidingExpiration="true"> 
    </forms> 
</authentication> 

    <authorization> 
     <deny users="?" /> 
    </authorization> 

Благодарим Вас за любые предложения

Войти Форма файла:

using System; 
using System.Web.Mvc; 
using System.Web.Security; 
using SAMPLE.Models; 
using SAMPLE.Helpers; 
using System.Web; 
using System.Linq; 
namespace SAMPLE.Controllers 
{ 
    public class LoginController : Controller 
    { 
     public ActionResult Login(string username, string password, string returnUrl) 
     { 
      if (!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password)) 
      { 
       if (UserAccount.IsValid(username, password)) 
        RedirectFromLoginPage(username, returnUrl); 
       else 
        ViewData["LoginMessage"] = "Incorrect username or password."; 
      } 

      return View(); 
     } 

     public ActionResult Logout() 
     { 
      FormsAuthentication.SignOut(); 
      return RedirectToAction("Login", "Login"); 
     } 
     private void RedirectFromLoginPage(string username, string returnUrl) 
     { 
      FormsAuthentication.SetAuthCookie(username, false); 

      var userType = 0; 
      var user = UserAccount.SingleOrDefault(x => x.Username == username.ToLower()); 
      if(user!=null) 
      userType = user.UserType;    

      if (userType == 2) 
      { 
       Response.Redirect("/Usrmgmt"); 
      } 
      else 
      { 
       var privileges = SAMPLE.Helpers.SAMPLEContext.Privileges; 

       if ((privileges & PrivilegeConstants.Home) == PrivilegeConstants.Home) 
        Response.Redirect("/"); 
       else if ((privileges & PrivilegeConstants.Budgets) == PrivilegeConstants.Budgets) 
        Response.Redirect("/Budget"); 

       else if ((privileges & PrivilegeConstants.Estimates) == PrivilegeConstants.Estimates) 
        Response.Redirect("/Estimate"); 

       else if ((privileges & PrivilegeConstants.EstimageCatalogue) == PrivilegeConstants.EstimageCatalogue) 
        Response.Redirect("/Labour"); 

       else if ((privileges & PrivilegeConstants.CRM) == PrivilegeConstants.CRM) 
        Response.Redirect("/CRM"); 

       else if ((privileges & PrivilegeConstants.JobStatus) == PrivilegeConstants.JobStatus) 
        Response.Redirect("/JobStatus"); 

       else if ((privileges & PrivilegeConstants.UserManage) == PrivilegeConstants.UserManage) 
        Response.Redirect("/Administration"); 

       else 
        Response.Redirect("/"); 
      } 
      //} 
     } 
    } 
} 
+0

это так, как это работает: У меня есть пользователь и передать я использую, что берет меня на странице/ursmgmt. Эта страница - моя супер-админ-страница. Я создаю компании здесь. Когда я создаю новую компанию, я создаю администратора для этой компании. поэтому компания использует эту регистрационную информацию и регистрируется в своем приложении и может настроить дополнительных пользователей на своей странице администрирования пользователей. – GTITC

+0

Пользователь, которого я создал как супер администратора, а также любые другие пользователи, создаваемые компанией для своей компании, имеют тип пользователя = 0. Первый пользователь, которого я создаю/администратор компании, не имеет никаких прав. Привилегии устанавливаются администратором компании на странице администрирования пользователей. поэтому работает так, чтобы убедиться, что я понятен: 1) Я регистрирую пароль пользователя «admin»: «admin», это приводит меня к странице создания супер-администратора. – GTITC

+0

2) Я создаю новую компанию под названием A1Company и настрою admin для этой компании как A1CompanyAdmin. 3) A1CompanyAdmin регистрируется в приложении и переходит на страницу управления пользователями и создает нового пользователя «A1CompanySalesUser», затем дает привилегии (отметки, на которых страницы из 5 страниц доступны пользователю, поэтому просто нажимает на одну или все страницы. У A1CompanySalesUser и A1CompanyAdmin оба пользователя имеют тип = 0, это может быть проблемой с типом или привилегиями пользователя? – GTITC

ответ

1

Пожалуйста, измените web.config до:

<authentication mode="Forms"> 
    <forms loginUrl="~/Login/Login" timeout="2880" protection="All"/> 
</authentication> 

Удалите код ниже и попробуйте еще раз:

<authorization> 
    <deny users="?" /> 
</authorization> 
+0

В чем разница с защитой = все и скользящим истечением? Я пытался это, так как я испытывал постоянные таймауты сеанса, где я был бы отправил обратно на страницу входа в систему.Это происходило до того, как я добавил какой-либо sessiontimout. Из того, что я узнал до сегодняшнего дня, если нет строки sessionatimeout, по умолчанию 30 минут, но даже тогда я выходил из системы до этого 30 минут, – GTITC

+0

protection = все означает, что все ваши страницы защищены аутентификацией формы. В то время как ускорение сползания сбрасывает время истечения срока действия для действительного файла cookie для проверки подлинности, если запрос сделан d прошло более половины интервала тайм-аута. –

+0

Я заменил свой код в web.config, как вы предложили. Все еще такая же проблема. Еще один пример: приложение, которое я использую, настроено для нескольких пользователей, каждому пользователю/компании разрешено добавлять своих пользователей, дополнительные пользователи компаний подключены к каждой компании.На данный момент у меня есть 2 пользователя, которые настроены как администраторы для db. Если я попытаюсь войти в систему с любым из этих прямых пользователей, я могу получить доступ к приложению с первой попытки. У меня проблема с пользователями, которые были созданы одной из «компаний». – GTITC