C# 一个解决方案中的第二个登录表单

C# 一个解决方案中的第二个登录表单,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: 主页中弹出的第二个登录表单: 在主页中,我尝试了类似的方法,但不起作用 在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗 当未经身份验证的用户访问主页时,您似乎希望在

我开始在我的应用程序中使用ASP.Net标识。我有一个页面/identity/account/login,在这里我可以输入login和密码并登录到页面。但我想在主页上创建第二个登录页面。在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗

第一个登录表单deafult:

主页中弹出的第二个登录表单:

在主页中,我尝试了类似的方法,但不起作用

在主页中,我有一个按钮,可以创建弹出窗口,我想在这里创建第二个登录表单。有可能吗

当未经身份验证的用户访问主页时,您似乎希望在弹出窗口中显示登录页面,为了满足要求,您可以尝试创建另一个登录页面作为部分视图,并将其加载到您的主页中,如下所示

_UserLogin.cshtml

@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">&times;</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();
}