c# - 如何在 ASP.Net Web Forms Identity 中使用 "username"而不是 "email address"登录

标签 c# asp.net webforms asp.net-identity

我需要将登录设置为使用用户名而不是电子邮件地址,如何更改? 我到处都找过了,但它们都是 MVC 代码而不是 Web 表单。

感谢您为解决我的问题所做的努力。

using System;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using Web_WebApp.Models;

namespace Web_WebApp.Account
{
    public partial class Login : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            RegisterHyperLink.NavigateUrl = "Register";
            // Enable this once you have account confirmation enabled for password reset functionality
            //ForgotPasswordHyperLink.NavigateUrl = "Forgot";
            OpenAuthLogin.ReturnUrl = Request.QueryString["ReturnUrl"];
            var returnUrl = HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
            if (!String.IsNullOrEmpty(returnUrl))
            {
                RegisterHyperLink.NavigateUrl += "?ReturnUrl=" + returnUrl;
            }
        }

        protected void LogIn(object sender, EventArgs e)
        {
            if (IsValid)
            {
                // Validate the user password
                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
                var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

                // This doen't count login failures towards account lockout
                // To enable password failures to trigger lockout, change to shouldLockout: true
                var result = signinManager.PasswordSignIn(UserName.Text, Password.Text, RememberMe.Checked, shouldLockout: false);

                switch (result)
                {
                    case SignInStatus.Success:
                        IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                        break;
                    case SignInStatus.LockedOut:
                        Response.Redirect("/Account/Lockout");
                        break;
                    case SignInStatus.RequiresVerification:
                        Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
                                                        Request.QueryString["ReturnUrl"],
                                                        RememberMe.Checked),
                                          true);
                        break;
                    case SignInStatus.Failure:
                    default:
                        FailureText.Text = "Invalid login attempt";
                        ErrorMessage.Visible = true;
                        break;
                }
            }
        }
    }
}
<小时/>
using System;
using System.Linq;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using Web_WebApp.Models;


namespace Web_WebApp.Account
{
    public partial class Register : Page
    {
        protected void CreateUser_Click(object sender, EventArgs e)
        {

            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
            var user = new ApplicationUser() { UserName = UserName.Text, Email = Email.Text, FirstName = FirstName.Text, MiddleName = MiddleName.Text, LastName = LastName.Text };
            IdentityResult result = manager.Create(user, Password.Text);
            if (result.Succeeded)
            {
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                //string code = manager.GenerateEmailConfirmationToken(user.Id);
                //string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                //manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

                signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
                IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            }
            else 
            {
                ErrorMessage.Text = result.Errors.FirstOrDefault();
            }
        }
    }
}

最佳答案

您可以简单地通过用户名或任何您想要的内容找到用户,然后直接使用 SignIn 方法登录用户:

protected void LogIn(object sender, EventArgs e)
{
    if (IsValid)
    {
        // Validate the user password
        var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

        // assuming you have a text box named UserName
        var user=manager.FindByName(UserName.Text);
        // or for advanced scenarios you can write:
        // var user = manager.Users.FirstOrDefault(u => u.UserName == UserName.Text);
        if(user !=null)
        {
            if(manager.CheckPassword(user, Password.Text))
            {
                signinManager.SignIn(user, false, RememberMe.Checked);
                IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            }
        }
    }
    FailureText.Text = "Invalid login attempt";
    ErrorMessage.Visible = true;
}

关于c# - 如何在 ASP.Net Web Forms Identity 中使用 "username"而不是 "email address"登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647519/

相关文章:

c# - 用C#写的com server对象能不能在客户端释放的时候立即发现?

c# - 将 GUID 转换为长

Perl WWW::Mechanize -- 获取 URL 的身份验证错误

c# - Compact Framework - OpenNetCf.Net FTP 示例?

C# 对象大小开销

c# - 如何使用 OWIN/Katana 保护 ASP.NET MVC Web Api?

html - 在不使用 class= 的情况下为一种元素使用相同的 CSS

c# - 如何在 TemplateField 中更改 ItemTemplate 的命令文本和 ImageButton

.net - ASMX 操作 404s,但 ASMX 服务描述没有,url 路由问题?

c# - 从后面的 ASP.NET 代码写入/覆盖特定的 XML 文件