WebSecurity.Login
en simplemembership tomar nombre de usuario y contraseña, cómo hacer para iniciar sesión el usuario utilizando el nombre de usuario o correo electrónico en lugar de simplemente nombre de usuario ?, para que el usuario pueda ingresar su correo electrónico o nombre de usuario.¿Cómo hacer que WebSecurity.Login inicie sesión usando un nombre de usuario o correo electrónico?
Respuesta
Puede heredar de SimpleMembershipProvider
y simplemente anular el método ValidateUser
de esta manera.
public class ExtendedSimpleMembershipProvider : SimpleMembershipProvider
{
public override bool ValidateUser(string login, string password)
{
// check to see if the login passed is an email address
if (IsValidEmail(login))
{
string actualUsername = base.GetUserNameByEmail(login);
return base.ValidateUser(actualUsername, password);
}
else
{
return base.ValidateUser(login, password);
}
}
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
}
Este es solo un enfoque. Puede escribir su propio MembershipProvider
, pero si solo necesita cambiar el método ValidateUser
, esto debería funcionar.
Agregue la siguiente configuración a web.config para configurar el proveedor.
<membership defaultProvider="ExtendedSimpleMembershipProvider">
<providers>
<clear/>
<add name="ExtendedSimpleMembershipProvider"
type="MyProject.Web.SimpleMembershipProvider, MyProject.Web"/>
</providers>
</membership>
Eso debería hacerlo avanzar en la dirección correcta.
No utilice el correo electrónico para la identificación del usuario. Es algo muy fácil de adivinar y hoy la gente podría usar una herramienta para adivinar eso por ellos. Es por eso que se usa el nombre de usuario, podría ser cualquier cosa.
Dicho esto, si realmente lo desea, puede usar el ID de la tabla donde se encuentra el nombre de usuario/correo electrónico + contraseña y asociarlo primero a un nombre de usuario y si eso no coincide con un correo electrónico. Si ambos fallan, el inicio de sesión falla.
No debería tener problemas al utilizar esto a continuación en su código de cheque, ya que no ha publicado nada aquí no puedo modificarlo para ver lo que necesita.
WebSecurity.GetUserId(email);
Para sus próximas preguntas con respecto a MVC, primero debe comprobar los foros ASP e intentar aquí. Sólo una opinión
WebSecurity solo llama a FormsAuthentication
debajo del capó. Usted puede hacer esto:
if (WebSecurity.UserExists(username))
{
FormsAuthentication.SetAuthCookie(username, false);
}
curioso por qué necesita esta característica. (Para su información, mi razonamiento es que si un usuario se ha autenticado con PayPal en un flujo de Express Checkout (carrito de compras), les permito iniciar sesión automáticamente en mi sitio como ese mismo usuario porque considero el riesgo muy bajo de que lo haría no ser la persona adecuada).
pueden ser de utilidad: Difference between FormsAuthentication and WebSecurity
He entendido mal la pregunta y pensé que querías decir * sin contraseña *, así que para eso es una respuesta :) –
Usted puede simplemente tirar del usuario con correo electrónico dada de la mesa UserProfiles
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
var login = false;
if (ModelState.IsValid)
{
if (!model.UserName.Contains("@"))
{
if (WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
login = true;
}
else
{
var targetUser = db.UserProfiles.Where(u => u.Email == model.UserName).FirstOrDefault();
if (targetUser != null && WebSecurity.Login(targetUser.UserName, model.Password, persistCookie: model.RememberMe))
login = true;
}
}
if (login)
return Redirect(returnUrl);
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
- 1. sfDoctrineGuardPlugin: inicie sesión con el correo electrónico
- 2. nombre de usuario o correo electrónico para iniciar sesión?
- 3. Cómo hacer un inicio de sesión usando el nombre de usuario o el ID de correo electrónico
- 4. "El correo electrónico no puede estar en blanco" Idear usando nombre de usuario o correo electrónico
- 5. correo electrónico authlogic como nombre de usuario
- 6. de inicio de sesión con nombre de usuario o dirección de correo electrónico en php
- 7. MS Access envía un correo electrónico (no desde Outlook o el correo electrónico del usuario)
- 8. w Diseñar, cómo permitir que un usuario de inicio de sesión inicie sesión como otro usuario
- 9. ¿Debo permitir que el usuario cambie el correo electrónico cuando usa el correo electrónico como nombre de usuario?
- 10. Obtener nombre/Apellido/Correo electrónico de Twitter usando OAuth
- 11. trim @ domain.xxx del correo electrónico dejando solo nombre de usuario
- 12. FOSUserBundle iniciar sesión con correo electrónico (Symfony2)
- 13. Facebook oauth recuperar correo electrónico de usuario
- 14. Correo electrónico como nombre de usuario en Django
- 15. ¿Cómo puedo extraer el nombre de usuario de una dirección de correo electrónico usando javascript?
- 16. Obtener UPN o correo electrónico para iniciar sesión de usuario en una aplicación .NET Web
- 17. recibir correo electrónico usando matlab
- 18. ¿Cómo me aseguro de que un usuario solo inicie sesión una vez?
- 19. ¿Cómo usar el correo electrónico en lugar del nombre de usuario para la autenticación del usuario?
- 20. @ Html.EditorFor Cómo hacer un tipo de atributo = "correo electrónico"
- 21. Enviar correo electrónico de activación al usuario
- 22. ¿Cuál es el formato de los encabezados de correo electrónico que muestran un nombre en lugar del correo electrónico?
- 23. Módulo de correo electrónico de Python: encabezado de formulario "De" con un nombre unicode + correo electrónico
- 24. Grails Spring Security utiliza el correo electrónico para iniciar sesión
- 25. recuperar correo electrónico usando C#?
- 26. Consulta de Active Directory para nombre de usuario, nombre, apellido y correo electrónico
- 27. Usuario de correo electrónico que destruyó la compilación en Teamcity
- 28. Cómo verificar que realmente exista una dirección de correo electrónico enviando un correo electrónico a java
- 29. Obtener la dirección de correo electrónico de un usuario del nombre de usuario a través de PowerShell y WMI?
- 30. ¿Cuáles son los pros y los contras de usar un correo electrónico como nombre de usuario?
estaría de acuerdo en que es fácil de adivinar, pero el usuario medio se va a utilizar o algo fácil de adivinar de todos modos. Digamos que tenías a David Jones. Él podría usar, david.jones, jonesd, djones. Pero todos son ridículamente imaginables, así que no creo que suponga una gran diferencia. – rashleighp