Hi team! im messing around creting a basic login function using Firebase and ASP.Net,
I have my login ActionResult inside the HomeController
but whenever i access the Login Page, the @Html.ValidationMessageFor message is being displayed when there's no input on the @Html.EditorFor,
i've already tried using CSS to hide it, but then it wont pop up again, i need this validation to show up after the Login button is clicked, hope someone can help me out, please check the code
HomeController
------------------------------------------------------------
public ActionResult Index()
{
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public async Task<ActionResult> Login(Models.User model, string returnURL)
{
try
{
if (ModelState.IsValid)
{
var auth = new FirebaseAuthProvider(new FirebaseConfig(apiKEY));
var a = await auth.SignInWithEmailAndPasswordAsync(model.Email, model.Password);
string token = a.FirebaseToken;
var user = a.User;
if (token != "")
{
SignInUser(user.Email, token, false);
return RedirectToLocal(returnURL);
}
else
{
ModelState.AddModelError(string.Empty, "Error email o contraseña incorrecta.");
}
}
}
catch (FirebaseAuthException ex)
{
Response.Write("<script>alert('Por favor ingrese contraseña correcta')</script>");
//throw new Exception(ex.Message);
}
return this.View(model);
}
private void SignInUser(string email, string token, bool isPersistent)
{
// Initialization.
var claims = new List<Claim>();
try
{
// Setting
claims.Add(new Claim(ClaimTypes.Email, email));
claims.Add(new Claim(ClaimTypes.Authentication, token));
var claimIdenties = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var ctx = Request.GetOwinContext();
var authenticationManager = ctx.Authentication;
// Sign In.
authenticationManager.SignIn(new Microsoft.Owin.Security.AuthenticationProperties() { IsPersistent = isPersistent }, claimIdenties);
}
catch (Exception ex)
{
// Info
throw ex;
}
}
private ActionResult RedirectToLocal(string returnUrl)
{
try
{
// Verification.
if (Url.IsLocalUrl(returnUrl))
{
// Info.
return Redirect(returnUrl);
}
}
catch (Exception ex)
{
// Info
throw ex;
}
// Info.
return this.RedirectToAction("Index", "Home");
}
----------------------------------------------------
View
----------------------------------------------------
@{
ViewBag.Title = "Login";
}
<head>
<link href="@Url.Content("~/Content/LoginStyleSheet.css")" rel="stylesheet" type="text/css"/>
</head>
<body>
<h2>Login</h2>
@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>User</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
</div>
<div hidden>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Login" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
</body>