Dotnetnuke:手机和网页会员

本文关键字:网页 手机 Dotnetnuke | 更新日期: 2023-09-27 18:10:10

我们正在构建一个通过DNN集成的移动应用程序。

移动应用程序使用ASP.net webservice连接到DNN模块,在移动应用程序中有两个选项

第一个选项:

  • 注册界面

在DNN模块中创建新用户,问题是在ASP.net Web服务中负责创建新用户的webmethod,它连接到DNN数据库并在表(成员表)中插入新记录

  • aspnet_Membership

-aspnet_Users

用户

问题是当在这些表中插入新用户时,特别是

([aspnet_Membership])使用ASP.net代码和Linq。sql框架

(密码)

,

(密码格式)

,

, (PasswordSalt)

我们用Trible DES算法来匹配用户密码

我们创建类来生成盐和加密和解密密码

public class NetFourMembershipProvider : SqlMembershipProvider
{
    public string GenerateSalt()
    {
        var buf = new byte[20];
        (new RNGCryptoServiceProvider()).GetBytes(buf);
        return Convert.ToBase64String(buf);
    }
    public string EncodePassword(byte passFormat, string passtext, string passwordSalt)
    {
        if (passFormat.Equals(0)) // passwordFormat="Clear" (0)
            return passtext;
        else
        {
            byte[] bytePASS = Encoding.Unicode.GetBytes(passtext);
            byte[] byteSALT = Convert.FromBase64String(passwordSalt);
            byte[] byteRESULT = new byte[byteSALT.Length + bytePASS.Length + 1];
            System.Buffer.BlockCopy(byteSALT, 0, byteRESULT, 0, byteSALT.Length);
            System.Buffer.BlockCopy(bytePASS, 0, byteRESULT, byteSALT.Length, bytePASS.Length);
            if (passFormat.Equals(1)) // passwordFormat="Hashed" (1)
            {
                HashAlgorithm ha = HashAlgorithm.Create(Membership.HashAlgorithmType);
                return (Convert.ToBase64String(ha.ComputeHash(byteRESULT)));
            }
            else // passwordFormat="Encrypted" (2)
            {
                return (Convert.ToBase64String(this.EncryptPassword(byteRESULT)));
            }
        }
    }
    public string GetClearTextPassword(string encryptedPwd)
    {
        byte[] encodedPassword = Convert.FromBase64String(encryptedPwd);
        byte[] bytes = this.DecryptPassword(encodedPassword);
        if (bytes == null)
        {
            return null;
        }
        return Encoding.Unicode.GetString(bytes, 0x10, bytes.Length - 0x10).Substring(0, Encoding.Unicode.GetString(bytes, 0x10, bytes.Length - 0x10).Length - 1);
    }
    public new byte[] EncryptPassword(byte[] password)
    {
        return base.EncryptPassword(password);
    }
}

和添加网页。配置文件sysyfer密钥

在app setting部分添加

在系统。Web部分我们添加

<machineKey validationKey="42441B48BCA3F15B2353E426BC2C9111680E09E8" decryptionKey="00B3BAE82FEF44753E95AE088CCDB5E75C0F3BB1E58DEC2A" decryption="3DES" validation="SHA1" />

,注册web服务的代码是

  try
        {
            string Email = Request.QueryString["Email"];
            string UserName = Request.QueryString["UserName"];
            string MobileNo = Request.QueryString["MobileNo"];
            string FirstName = Request.QueryString["FirstName"];
            string LastName = Request.QueryString["LastName"];
            string password = Request.QueryString["Password"];
            string salt = "35wj1+r/Dr6RYjBbIRhWeQ==";
            NetFourMembershipProvider decriptor = new NetFourMembershipProvider();
            string encryptedpassword = decriptor.EncodePassword(2, password, salt);
            ORMDataContext myContext = new ORMDataContext();
            int userCount = (from user in myContext.Users
                             where user.Username == UserName
                             select user.UserID).Count();
            CustomUser myUser = new CustomUser();
            if (userCount == 0)
            {
                aspnet_User membership_user = new aspnet_User();
                membership_user.ApplicationId = Guid.Parse("4985C01A-3338-49C9-AC39-DC5934D5ED7A");
                membership_user.UserName = UserName;
                membership_user.LoweredUserName = UserName.ToLower();
                membership_user.LastActivityDate = DateTime.Now;
                membership_user.IsAnonymous = false;
                membership_user.MobileAlias = MobileNo;
                membership_user.UserId = Guid.NewGuid();
                myContext.aspnet_Users.InsertOnSubmit(membership_user);
                myContext.SubmitChanges();
                aspnet_Membership membership = new aspnet_Membership();
                Guid appID = Guid.Parse("4985C01A-3338-49C9-AC39-DC5934D5ED7A");
                membership.ApplicationId = appID;
                membership.CreateDate = DateTime.Now;
                membership.Email = Email;
                membership.FailedPasswordAnswerAttemptCount = 0;
                membership.FailedPasswordAnswerAttemptWindowStart = DateTime.Now;
                membership.FailedPasswordAttemptCount = 0;
                membership.FailedPasswordAttemptWindowStart = DateTime.Now;
                membership.IsApproved = true;
                membership.IsLockedOut = true;
                membership.LastLockoutDate = DateTime.Now;
                membership.LastLoginDate = DateTime.Now;
                membership.LastPasswordChangedDate = DateTime.Now;
                membership.LoweredEmail = Email.ToLower();
                membership.MobilePIN = "";
                membership.Password = encryptedpassword;
                membership.PasswordAnswer = "";
                membership.PasswordFormat = 2;
                membership.PasswordQuestion = "";
                membership.PasswordSalt = salt;
                membership.UserId = membership_user.UserId;
                myContext.aspnet_Memberships.InsertOnSubmit(membership);
                myContext.SubmitChanges();
                Borsa_Ws.User user = new User();
                user.Username = UserName;
                user.CreatedOnDate = DateTime.Now;
                user.DisplayName = UserName;
                user.Email = Email;
                user.FirstName = FirstName;
                user.LastName = LastName;
                user.UpdatePassword = false;
                user.LastModifiedByUserID = -1;
                user.IsSuperUser = false;
                myContext.Users.InsertOnSubmit(user);
                myContext.SubmitChanges();
                Borsa_Ws.UserRole user_role1 = new Borsa_Ws.UserRole();
                user_role1.UserID = user.UserID;
                user_role1.RoleID = 1;
                Borsa_Ws.UserRole user_role2 = new Borsa_Ws.UserRole();
                user_role2.UserID = user.UserID;
                user_role2.RoleID = 2;
                myContext.UserRoles.InsertOnSubmit(user_role1);
                myContext.UserRoles.InsertOnSubmit(user_role2);
                myContext.SubmitChanges();
                myUser.Roles = new int[] { 1, 2 };
                myUser.Logged = "1";
                myUser.UserID = user.UserID.ToString();
            }
            else
            {
                myUser.Logged = "0";
            }
            JavaScriptSerializer searlizer = new JavaScriptSerializer();
            Response.Clear();
            Response.ContentType = "application/json; charset=utf-8";
            Response.Write(searlizer.Serialize(myUser));
            Response.End();
        }
        catch
        {
        }

当我们进入DNN网站并尝试登录时我们会插入新的数据

DNN拒绝登录

你能告诉我我的代码出了什么问题吗

谢谢

Dotnetnuke:手机和网页会员

不建议直接添加数据到aspnet_membership和users表中,使用DotNetNuke API创建新用户。

还注意到web服务将需要一个散列键验证,以确保目标受众正在使用您的注册服务。

你的代码对我来说非常有用!我发现了一个错误,这将导致密码不匹配,然后可能无法登录。线:

byte[] byteRESULT = new byte[byteSALT.Length + bytePASS.Length+1];
应:

byte[] byteRESULT = new byte[byteSALT.Length + bytePASS.Length];

希望有帮助!