C# 一个解决方案中的第二个登录表单
我开始在我的应用程序中使用ASP.Net标识。我有一个页面/identity/account/login,在这里我可以输入login和密码并登录到页面。但我想在主页上创建第二个登录页面。在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗 第一个登录表单deafult: 主页中弹出的第二个登录表单: 在主页中,我尝试了类似的方法,但不起作用 在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗 当未经身份验证的用户访问主页时,您似乎希望在弹出窗口中显示登录页面,为了满足要求,您可以尝试创建另一个登录页面作为部分视图,并将其加载到您的主页中,如下所示 _UserLogin.cshtmlC# 一个解决方案中的第二个登录表单,c#,asp.net,asp.net-core,asp.net-identity,C#,Asp.net,Asp.net Core,Asp.net Identity,我开始在我的应用程序中使用ASP.Net标识。我有一个页面/identity/account/login,在这里我可以输入login和密码并登录到页面。但我想在主页上创建第二个登录页面。在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗 第一个登录表单deafult: 主页中弹出的第二个登录表单: 在主页中,我尝试了类似的方法,但不起作用 在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗 当未经身份验证的用户访问主页时,您似乎希望在
@model MyLoginModel
<div class="row">
<div class="col-md-4">
<section>
<form id="account" asp-controller="Account" asp-action="Login" method="post">
<h4>Use a local account to log in.</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMe">
<input asp-for="Input.RememberMe" />
@Html.DisplayNameFor(m => m.Input.RememberMe)
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="form-group">
<p>
<a id="forgot-password" asp-page="/Areas/Identity/Pages/Account/ForgotPassword">Forgot your password?</a>
</p>
<p>
<a asp-page="/Areas/Identity/Pages/Account/Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
<p>
<button type="submit" asp-page-handler="SendVerificationEmail" class="btn-link" style="padding:0px;margin:0px;border:0px">Resend email confirmation</button>
</p>
</div>
</form>
</section>
</div>
<div class="col-md-6 col-md-offset-2">
<section>
<h4>Use another service to log in.</h4>
<hr />
@{
if ((Model.ExternalLogins?.Count ?? 0) == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}
}
</section>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
MyLoginModel类
public class MyLoginModel
{
public InputModel Input { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public string ReturnUrl { get; set; }
[TempData]
public string ErrorMessage { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
}
账户控制员
public class AccountController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public AccountController(SignInManager<IdentityUser> signInManager,
UserManager<IdentityUser> userManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public async Task<IActionResult> Login(MyLoginModel myLoginModel, string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(myLoginModel.Input.Email, myLoginModel.Input.Password, myLoginModel.Input.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = myLoginModel.Input.RememberMe });
}
if (result.IsLockedOut)
{
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View();
}
}
// If we got this far, something failed, redisplay form
return View();
}
}
在主页中
<div id="myModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<partial name="_UserLogin" model='new MyLoginModel { ReturnUrl = "/" }' />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
测试结果
好的,我找到了解决办法。我创建了第二个方法,用于登录HomeController页面 查看我的案例_布局-登录弹出窗口: 控制器在我的情况下HomeController:
不工作意味着什么?会发生什么?它是如何不按预期工作的?你会犯什么错误?
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" name="email" id="email">
<i class="icon_mail_alt"></i>
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" name="password" id="password" value="">
<i class="icon_lock_alt"></i>
</div>
<div class="text-center">
<input type="submit" value="Log In" class="btn_1 full-width" id="next">
</div>
$("#next").click(function () {
GetData();
});
function GetData() {
var InputLogin = $('#email').val();
var InputPassword = $('#password').val();
$.ajax({
type: "POST",
url: 'Home/Logowanie',
data: {
email: InputLogin,
password: InputPassword,
first: false,
second: false,
},
success: function () { location.reload(); },
error: function () { alert('Error'); },
});
}
public async Task<IActionResult> Logowanie(string email, string password, bool first, bool second)
{
string returnUrl = null;
returnUrl = returnUrl ?? Url.Content("~/");
email = email.ToUpper();
if (ModelState.IsValid)
{
lockoutOnFailure: true
var user = await _userManager.FindByEmailAsync("adam@atma.com.pl");
var result = await _signInManager.PasswordSignInAsync(user, password,
first,second);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
}
}
return Page();
}