2012-02-12 14 views
6

Soy nuevo en MVC y realmente nuevo en el desarrollo web. Tengo alrededor de 7 años de experiencia en desarrollo, pero en servicios, bases de datos, modelos de objetos, etc. básicamente desarrollo de nivel medio y back-end. Estoy tratando de aprender ASP.NET y decidí construir un sitio usando MVC3 para un sitio personal para mí. Estaré alojando esto desde una cuenta en dotnet-hosts.com. Aquí está mi pregunta ... No tengo un dominio y usaré el proveedor integrado de membresía. Me di cuenta en el auto genera código que se creó cuando he añadido la plantilla de proyecto que en el AccountController en el método ChangePassword (ChangePasswordModel modelo) existe esta línea de código ...MVC3 + Cómo obtener el nombre de usuario del usuario registrado actualmente

MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */); 

Mi pregunta es específicamente alrededor User.Identity.Name , parece que devolvería el nombre de usuario de Windows al igual que Environment.UserName. La plantilla de Visual Studio que utilicé es la (Mobile Ready HTML5 MVC.NET) ya que deseo poder admitir clientes desde cualquier dispositivo ... PC con Windows, Apple, Windows Phone, iPhone, etc ... Si la llama al User.Identity.Name es correcto, entonces me gustaría preguntar cómo funciona esto en dispositivos que no son Windows como un iPhone? Si mi suposición es correcta, esto solo funcionará para las computadoras con un dominio de Windows, ¿cómo puedo lograrlo? ¿necesitaría quizás usar algo de almacenamiento en caché? De ser así, ¿podría tomar el nombre de usuario y su dirección IP para usar como clave de caché en la página Autenticación?

Mi pregunta de alto nivel es ... ¿Cómo obtengo el userName del usuario registrado actual independientemente del dispositivo/plataforma? Sé que esta pregunta probablemente no está bien escrita y puede ser difícil de entender ... Me disculpo por eso. Soy nuevo en el desarrollo web y trato de mojarme los pies y me gustaría comenzar a utilizar la última tecnología.

Respuesta

4

Como usted dijo User.Identity.Name es de hecho correcto. para devolver el nombre de los usuarios que iniciaron sesión. Pero la sección de membresía como usted dijo, proporciona solo cuentas de Windows. Puede usar archivos similares sin el usuario de cuentas de Windows, para trabajar en todos los escenarios, y aún así puede verificar contra ventanas si están presentes. Si lo llamas sin membresía y sigues la plantilla MVC3 predeterminada, debería funcionar bien.

String Username = User.Identity.Name; 

Al iniciar la sesión, utilizando el MVC3 plantilla, se crea un authcookie. Ver el código del controlador de cuenta. Aquí, dos parámetros se pasan a él. El nombre de usuario, y para persistir (cuando el navegador está cerrado, el inicio de sesión todavía se almacena en caché).

El nombre de usuario es un campo de cadena, que es lo que se llama por User.Identity.Name y de hecho, se puede poner cualquier cosa en él, y no está de todos modos vinculado al inicio de sesión de Windows.

Puede probar el inicio de sesión mediante el método que desee y, en caso afirmativo, establecer una cookie utilizando el método authcookie. (está encriptado). Y establece el nombre de usuario a lo que quieras. Y si su verificación del usuario falla, no cree una y vuelva a corregirla.

Vea el código de ejemplo. Todo esto es de memoria, ya que no tengo código delante de mí como referencia. Pero todo está en el controlador de cuenta, Acción de inicio de sesión.

Cuando se establece la cookie, el estado de inicio de sesión de los usuarios se almacena en caché para la sesión. Deberá asegurarse de que el usuario haya iniciado sesión cuando visite una página web. De lo contrario, iniciar sesión no tendrá sentido. Este es un atributo simple en el controlador/acción.

Nota: no haga esto al controlador de cuenta/inicio de sesión, ya que no podrá visitar la página de inicio de sesión, ya que no ha iniciado sesión.

[Authorize] 
public ActionResult DoSomething() 
{ 
    // ... 
} 

Espero que he ayudado.

6

La llamada es correcta. El User.Identity.Name se completa con el proveedor de autenticación que esté en uso: autenticación de Windows, autenticación de formularios, algún proveedor de autenticación personalizado o lo que sea. No está vinculado a un "tipo" de usuario específico. El proveedor de autenticación tiene la responsabilidad de asegurarse de que el objeto Identity corresponde al usuario actual en cada solicitud. Por lo general, esa parte se cuida usando una combinación de cookies y base de datos.

La plantilla MVC (aunque no he tenido un vistazo a la plantilla ya MVC 2) utiliza la clase de ASP.NET Membership, que a su vez utiliza un proveedor de pertenencia - por ejemplo SqlMembershipProvider o ActiveDirectoryMembershipProvider - los antiguos almacenes de sus usuarios credenciales (nombre de usuario y contraseña, etc.) en una base de datos de SQL Server, este último usa Active Directory (es decir, principalmente inicios de sesión de Windows). SqlMembershipProvider es el valor predeterminado, y MVC está configurado para usar un archivo de base de datos SQLExpress local como su almacén de usuarios.

El proveedor de autenticación implementado en el proyecto de plantilla usa FormsAuthentication, que realiza el procedimiento de inicio de sesión a través de un formulario HTML simple (el de la vista LogOn) y mantiene al usuario conectado mediante una cookie cifrada. Funciona en cualquier plataforma.

La configuración para FormsAuthentication y SqlMembershipProvider se puede encontrar en web.config (la que se encuentra en la raíz del sitio). Allí puede encontrar las cadenas de conexión para la base de datos SQLExpress (y p. Ej. Cambiarlas para usar un SQL Server "real" si es necesario), el tiempo de espera para inicios de sesión, etc.

(Tenga en cuenta que puede hacer mucha de esa configuración fácilmente en una GUI a través del botón "Configuración de ASP.NET" en la barra de herramientas de Solution Explorer en Visual Studio; también proporciona una manera fácil de configurar los primeros usuarios).

En resumen, está todo listo para funcionar, y no bloquea a los usuarios que no usan Windows.

Cuestiones relacionadas