gpt4 book ai didi

c# - 实现自定义 MembershipUser 和自定义 MembershipProvider

转载 作者:行者123 更新时间:2023-11-30 22:39:45 24 4
gpt4 key购买 nike

我尝试在我自己的数据库中使用自定义 MemberShipUser 实现自定义 MembershipPriver(具有特定的用户表模型):

这是完全不同的文件:

iTwitterMembershipProvider.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Collections.Specialized;
using iTwitter.Models;


public class iTwitterMembershipProvider : MembershipProvider
{

public override string ApplicationName
{
get { return _ApplicationName; }
set { _ApplicationName = value; }
}

public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
throw new NotImplementedException();
}

public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
{
return false;
}

public override iTwitterMembershipUser CreateUser(string login,
string password,
string email,
string tokenKey,
string tokenSecret,
string twitterUserId,
object providerUserKey,
out MembershipCreateStatus status)
{
ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(login,
password,
true);

OnValidatingPassword(args);

if (args.Cancel)
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}

if (RequiresUniqueEmail && GetUserNameByEmail(email) != "")
{
status = MembershipCreateStatus.DuplicateEmail;
return null;
}

iTwitterMembershipUser u = GetUser(login, false);

if (u == null)
{
UserRepository _user = new UserRepository();

_user.CreateUser(login, password, email);
status = MembershipCreateStatus.Success;

return GetUser(login, false);
}
else
{
status = MembershipCreateStatus.DuplicateUserName;
}

return null;
}

public override bool DeleteUser(string username, bool deleteAllRelatedData)
{
throw new NotImplementedException();
}

public override bool EnablePasswordReset
{
get { return _EnablePasswordReset; }
}

public override bool EnablePasswordRetrieval
{
get { return _EnablePasswordRetrieval; }
}

public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
{
throw new NotImplementedException();
}

public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
{
throw new NotImplementedException();
}

public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
throw new NotImplementedException();
}

public override int GetNumberOfUsersOnline()
{
throw new NotImplementedException();
}

public override string GetPassword(string username, string answer)
{
throw new NotImplementedException();
}

public override iTwitterMembershipUser GetUser(string login, bool userIsOnline)
{
UserRepository _user = new UserRepository();

return _user.GetUser(login);
}

public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
throw new NotImplementedException();
}

public override string GetUserNameByEmail(string email)
{
UserRepository _user = new UserRepository();

return _user.GetUserNameByEmail(email);
}

public override int MaxInvalidPasswordAttempts
{
get { return _MaxInvalidPasswordAttempts; }
}

public override int MinRequiredNonAlphanumericCharacters
{
get { return _MinRequiredNonalphanumericCharacters; }
}

public override int MinRequiredPasswordLength
{
get { return _MinRequiredPasswordLength; }
}

public override int PasswordAttemptWindow
{
get { return _PasswordAttemptWindow; }
}

public override MembershipPasswordFormat PasswordFormat
{
get { return _PasswordFormat; }
}

public override string PasswordStrengthRegularExpression
{
get { return _PasswordStrengthRegularExpression; }
}

public override bool RequiresQuestionAndAnswer
{
get { return _RequiresQuestionAndAnswer; }
}

public override bool RequiresUniqueEmail
{
get { return _RequiresUniqueEmail; }
}

public override string ResetPassword(string username, string answer)
{
throw new NotImplementedException();
}

public override bool UnlockUser(string userName)
{
throw new NotImplementedException();
}

public override void UpdateUser(MembershipUser user)
{
throw new NotImplementedException();
}

public override bool ValidateUser(string login, string password)
{
if (login == password)
{
return true;
}
else
{
return false;
}
}


//
// A helper function to retrieve config values from the configuration file.
//

private string GetConfigValue(string configValue, string defaultValue)
{
if (string.IsNullOrEmpty(configValue))
return defaultValue;

return configValue;
}

//
// Properties from web.config, default all to False
//
private string _ApplicationName;
private bool _EnablePasswordReset;
private bool _EnablePasswordRetrieval = false;
private bool _RequiresQuestionAndAnswer = false;
private bool _RequiresUniqueEmail = true;
private int _MaxInvalidPasswordAttempts;
private int _PasswordAttemptWindow;
private int _MinRequiredPasswordLength;
private int _MinRequiredNonalphanumericCharacters;
private string _PasswordStrengthRegularExpression;
private MembershipPasswordFormat _PasswordFormat = MembershipPasswordFormat.Hashed;

public override void Initialize(string name, NameValueCollection config)
{
if (config == null)
throw new ArgumentNullException("config");

if (name == null || name.Length == 0)
name = "CustomMembershipProvider";

if (String.IsNullOrEmpty(config["description"]))
{
config.Remove("description");
config.Add("description", "Custom Membership Provider");
}

base.Initialize(name, config);

_ApplicationName = GetConfigValue(config["applicationName"],
System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
_MaxInvalidPasswordAttempts = Convert.ToInt32(
GetConfigValue(config["maxInvalidPasswordAttempts"], "5"));
_PasswordAttemptWindow = Convert.ToInt32(
GetConfigValue(config["passwordAttemptWindow"], "10"));
_MinRequiredNonalphanumericCharacters = Convert.ToInt32(
GetConfigValue(config["minRequiredNonalphanumericCharacters"], "1"));
_MinRequiredPasswordLength = Convert.ToInt32(
GetConfigValue(config["minRequiredPasswordLength"], "6"));
_EnablePasswordReset = Convert.ToBoolean(
GetConfigValue(config["enablePasswordReset"], "true"));
_PasswordStrengthRegularExpression = Convert.ToString(
GetConfigValue(config["passwordStrengthRegularExpression"], ""));

}
}

iTwitterMembershipUser.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using iTwitter.Models;

namespace iTwitter.Models
{
public class iTwitterMembershipUser : MembershipUser
{
private string _tokenKey;
private string _tokenSecret;
private string _twitterUserId;
private string _login;
private string _email;
private int _providerUserKey;

public string tokenKey
{
get { return _tokenKey; }
set { _tokenKey = value; }
}

public string tokenSecret
{
get { return _tokenSecret; }
set { _tokenSecret = value; }
}

public string twitterUserId
{
get { return _twitterUserId; }
set { _twitterUserId = value; }
}

public string login
{
get { return _login; }
set { _login = value; }
}

public string email
{
get { return _email; }
set { _email = value; }
}

public int providerUserKey
{
get { return _providerUserKey; }
set { _providerUserKey = value; }
}

public iTwitterMembershipUser(object providername,
string login,
int providerUserKey,
string email,
string tokenKey,
string tokenSecret,
string twitterUserId)
{
this.tokenKey = tokenKey;
this.tokenSecret = tokenSecret;
this.twitterUserId = twitterUserId;
this.login = login;
this.providerUserKey = providerUserKey;
this.email = email;
}




}
}

网络配置.cs

<?xml version="1.0"?>

<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=152368
-->

<configuration>
<connectionStrings>
<add name="iTwitterDB" connectionString="metadata=res://*/Models.iTwitter.csdl|res://*/Models.iTwitter.ssdl|res://*/Models.iTwitter.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\iTwitter.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /></assemblies>
</compilation>

<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="iTwitterMembershipProvider" connectionStringName="iTwitterDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>

<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="iTwitterDB" applicationName="/" />
</providers>
</profile>

<roleManager enabled="false">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="iTwitterDB" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>

<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web>

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

iTwitter数据库:

id int
login varchar(50)
password varchar(100) (MD5 Password Hash)
email varchar(100)
tokenKey varchar(100)
tokenSecret varchar(100)
twitterUserId varchar(100)

UserRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;

namespace iTwitter.Models
{
public class UserRepository
{
public iTwitterMembershipUser CreateUser(string login, string password, string email)
{
using (iTwitterDB db = new iTwitterDB())
{
Users user = new Users();

user.login = login;
user.email = email;
user.password = password;
user.tokenKey = "0";
user.tokenSecret = "0";
user.twitterUserId = "0";

db.AddToUsers(user);
db.SaveChanges();

return GetUser(login);
}
}

public string GetUserNameByEmail(string email)
{
using (iTwitterDB db = new iTwitterDB())
{
var result = from u in db.Users where (u.email == email) select u;

if (result.Count() != 0)
{
var dbuser = result.FirstOrDefault();

return dbuser.login;
}
else
{
return "";
}
}
}

public iTwitterMembershipUser GetUser(string login)
{
using (iTwitterDB db = new iTwitterDB())
{
var result = from u in db.Users where (u.login == login) select u;

if (result.Count() != 0)
{
var dbuser = result.FirstOrDefault();

string _login = dbuser.login;
int _providerUserKey = dbuser.id;
string _email = dbuser.email;
string _tokenKey = dbuser.tokenKey;
string _tokenSecret = dbuser.tokenSecret;
string _twitterUserId = dbuser.twitterUserId;


iTwitterMembershipUser user = new iTwitterMembershipUser("CustomMembershipProvider",
_login,
_providerUserKey,
_email,
_tokenKey,
_tokenSecret,
_twitterUserId);

return user;
}
else
{
return null;
}
}
}
}
}

我在编译过程中遇到了一些错误:

1) 'iTwitterMembershipProvider' does not implement inherited abstract

member 'System.Web.MembershiProvider.CreateUser(string, string, string, string, string, bool, object, out System.Web.Security.MembershipCreateStatus)'

2) iTwitterMembershipProvider.CreateUser(string,

string, string, string, string, bool, object, out System.Web.Security.MembershipCreateStatus)': no suitable method found to override

3)'iTwitterMembershipProvider.GetUser(string,

bool)': return type must be 'System.Web.Security.MembershipUser' to match overridden member 'System.Web.Security.MembershipProvider.GetUser(string, bool)'

我在这里被封锁了。

谢谢。

最佳答案

将CreateUser 和GetUser 的返回类型更改为基类MembershipUser。当您调用这些方法时,您可以将其转换为 iTwitterMembershipUser 类型。例如,在 CreateUser 中,您将返回语句更改为

return (iTwitterMembershipUser) GetUser(login);

关于c# - 实现自定义 MembershipUser 和自定义 MembershipProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5556031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com