asp.net-mvc-4 - nombre - obtener el usuario logueado asp.net mvc
¿Cómo hacer WebSecurity.Iniciar sesión para iniciar sesión con un nombre de usuario o correo electrónico? (4)
No utilice el correo electrónico para la identificación del usuario. Es algo muy fácil de adivinar y hoy las personas podrían 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 utilizar el ID de la tabla donde se encuentra el nombre de usuario / correo electrónico + contraseña y asociarlo primero con un nombre de usuario y si falla, también coincidirá con un correo electrónico. Si ambos fallan, el inicio de sesión falla.
No debería tener problemas para usar esto a continuación en su código de verificación, ya que no publicó nada aquí. No puedo modificar para ver lo que necesita.
WebSecurity.GetUserId(email);
Para sus próximas preguntas sobre MVC, primero debe verificar los foros de ASP y luego intentarlo aquí. Solo una opinion
WebSecurity.Login
in simplemembership ¿toma el nombre de usuario y la contraseña, cómo hacer que el usuario inicie sesión usando el nombre de usuario o correo electrónico en lugar de solo el nombre de usuario ?, para que el usuario pueda ingresar su correo electrónico o nombre de usuario para iniciar sesión.
Puede heredar de SimpleMembershipProvider
y simplemente anular el método ValidateUser
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. Podría 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 hacer que vayas en la dirección correcta.
Simplemente puede extraer al usuario con un correo electrónico dado de la tabla 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);
}
WebSecurity simplemente llama a FormsAuthentication
bajo el capó. Puedes hacerlo:
if (WebSecurity.UserExists(username))
{
FormsAuthentication.SetAuthCookie(username, false);
}
Curioso por qué necesitas esta característica. (Para su información: mi razonamiento para necesitar esto es si un usuario se ha autenticado con PayPal en un flujo de Pago exprés (carrito de compras), les permito que se registren automáticamente en mi sitio como ese mismo usuario porque considero que el riesgo es muy bajo) no ser la persona adecuada).
Puede ser de utilidad: diferencia entre FormsAuthentication y WebSecurity