我有一个新表,其中包含旧密码,我需要检查是否有匹配.
如果匹配,我需要ChangePassword控件来不更改密码.我需要告诉用户该密码已被使用并且是一张新密码.
我似乎无法通过更改密码来中断控制.也许我正在使用错误的事件.
这是我的一段代码,或者我希望它如何工作.我感谢你的帮助.
protected void ChangePassword1_ChangedPassword(object sender, EventArgs e)
{
MembershipUser user = Membership.GetUser();
string usrName = "";
if (user != null)
{
string connStr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
SqlConnection mySqlConnection = new SqlConnection(connStr);
SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
mySqlCommand.CommandText = "Select UserName from OldPasswords where UserName = 'test'";
mySqlConnection.Open();
SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(CommandBehavior.Default);
while (mySqlDataReader.Read())
{
usrName = mySqlDataReader["UserName"].ToString();
if (usrName == user.ToString())
{
Label1.Text = "Match";
}
else
{
Label1.Text = "NO Match!";
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个SQL脚本,可以在我的数据库中创建用户.它使用.Net成员资格存储过程.
此时它工作正常.
唯一的问题是密码保存为明文.我应该在这里更改为他们是盐渍/加密的(不知道在这里使用什么术语)
GO
DECLARE @return_value int,
@UserId uniqueidentifier
EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
@ApplicationName = N'Theater',
@UserName = N'sam.sosa',
@Password = N'mypassword',
@PasswordSalt = N'eyhKDP858wdrYHbBmFoQ6DXzFE1FB+RDP4ULrpoZXt6f',
@Email = N'sam@Simple.com',
@PasswordQuestion = N'Whats your favorite color',
@PasswordAnswer = N'Fusia',
@IsApproved = 1,
@CurrentTimeUtc = '2010-03-03',
@CreateDate = '2010-03-03',
@UniqueEmail = 1,
@PasswordFormat = 0,
@UserId = @UserId OUTPUT
SELECT @UserId as N'@UserId'
SELECT 'Return Value' = @return_value
GO
Run Code Online (Sandbox Code Playgroud)
谢谢!
asp.net-membership sqlmembershipprovider membership-provider
所以我试图将用户的概念引入我的应用程序,并拥有自己的一组自定义登录例程等工作正常.在我的模块中,我将IUserSession绑定到我的实现和InSingletonScope.
现在我怀疑是这种情况,并且已经能够证明这不是正确的事情,如果我尝试使用两个用户登录同一站点,我只获得一组数据.
如果我实现MembershipProvider,我是否应该避免这种限制.我知道,如果我实施会员提供者,我不必注入所有内容,但我的登录不仅仅是用户名/密码,如何使用其他数据登录"?
我在共享主机上部署了asp.net mvc 3站点.我的问题是我的网站经常在5到10分钟后自动注销用户.虽然我已经在web.config和application_start中将时间设置为200分钟,如下所示
<forms loginUrl="~/Account.mvc/index" slidingExpiration="true" timeout="200" protection="All" />
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, rememberMe);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(200), rememberMe, CurrentUser.UserID +"|"+ CurrentUser.EmployeeID);
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
Response.Cookies.Add(authCookie);
Run Code Online (Sandbox Code Playgroud) asp.net-mvc asp.net-membership membership-provider asp.net-mvc-3
我希望能有效地回答这个问题.我应该如何将web.config中为asp.net成员资格提供的设置移动到数据库中以进行跨应用程序自定义.例如,会员信息包括以下内容
<providers>
<add
name="OdbcProvider"
type="Samples.AspNet.Membership.OdbcMembershipProvider"
connectionStringName="OdbcServices"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
writeExceptionsToEventLog="true" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
.NET 2.0
ASP.NET 2.0
我正在尝试NCCMembershipUser使用以下代码向我填写数据:
string name = User.Identity.Name;
NCCMembershipUser currentUser = (NCCMembershipUser)NCCMembershipProvider.GetUser(name, true);
currentUser.Salutation = GenderSelect.SelectedValue;
currentUser.FirstName = TextBoxFirstName.Text;
currentUser.LastName = TextBoxLastName.Text;
currentUser.Position = TextBoxPosition.Text;
...
try
{
NCCMembershipProvider u = (NCCMembershipProvider)Membership.Provider;
u.UpdateUser(currentUser);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误"非静态字段,方法或属性需要对象引用'System.Web.Security.MembershipProvider.GetUser(string,bool)'"
如果我改为使用Membership.GetUser()(没有name字符串)来访问当前用户,它会给我一个转换错误,并且GetUser()显示它无法被覆盖.
编辑:
我得到的转换错误是"[A] NCC.App_Code.NCCMembershipProvider无法转换为[B] NCC.App_Code.NCCMembershipProvider."
我想要做的是使用Visual Studio 2012附带的默认MVC 4模板作为我的新项目的基础.但是,我想用自定义成员资格提供程序替换SQL提供程序,以便我可以访问我的RavenDB来获取我的用户.我已经像以前一样实现了自定义提供程序,但WebSecurity方法抛出了以下异常.
这行代码:
ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
具体方法是:
WebSecurity.GetUserId
抛出这个例外:
在调用"WebSecurity"类的任何其他方法之前,必须调用"WebSecurity.InitializeDatabaseConnection"方法.此调用应放在站点根目录中的_AppStart.cshtml文件中.
现在我无法调用InitializeDatabaseConnection,因为我的提供程序不是SQL提供程序.此方法需要SQL提供程序和SQL连接字符串.这是一个常见问题还是我错过了什么?为什么必须初始化WebSecurity,为什么只能使用SQL提供程序进行连接?
我是否必须将代码更改为不使用WebSecurity类?
我整天都在这里,我很累.我希望我没有忽视一些简单的事情.也许还有一个朗姆酒和可乐会帮助......
更新:2012年8月19日
我反编译GetUserId方法,发现它失败的唯一原因是因为VerifyProvider调用.
public static int GetUserId(string userName)
{
WebSecurity.VerifyProvider();
MembershipUser user = Membership.GetUser(userName);
if (user == null)
return -1;
else
return (int) user.ProviderUserKey;
}
private static ExtendedMembershipProvider VerifyProvider()
{
ExtendedMembershipProvider membershipProvider = Membership.Provider as ExtendedMembershipProvider;
if (membershipProvider == null)
throw new InvalidOperationException(WebDataResources.Security_NoExtendedMembershipProvider);
membershipProvider.VerifyInitialized();
return membershipProvider;
}
Run Code Online (Sandbox Code Playgroud)
现在,它在VerifyProvider方法中失败的唯一原因是因为调用了VerifyInitialized,我无法在我的成员资格提供程序中覆盖它.此外,如果它没有调用我的提供程序,那么我不确定在处理VerifyInitialized时调用了什么代码.
internal virtual void VerifyInitialized()
{
}
Run Code Online (Sandbox Code Playgroud)
我正在删除Web.Config中的所有其他成员资格提供程序.至少我想我是.这是条目.
<membership defaultProvider="RavenMembershipProvider">
<providers>
<clear />
<add name="RavenMembershipProvider" type="BigGunsGym.Infrastructure.Providers.RavenMembershipProvider" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud) asp.net-membership membership-provider webmatrix asp.net-mvc-4
我在8个月前发布了这个问题.接受的答案涉及一些你不会通过默认提供商的规则播放而错过的东西.例如,如果您不使用从RoleProvider继承的自定义RoleProvider,则您将失去使用快速快捷方式的功能User.IsInRole().答案是指像"内置管道"这样的东西.
我想知道的是,我可以在哪里找到依赖于"内置管道"的完整列表,以及显示他们在幕后调用哪些重写方法的内容.
例如,HttpContext.Current.User.IsInRole()是(我假设)在我的自定义RoleProvider中引用并调用我的覆盖"IsUserInRole()"方法,但是我希望看到明确说明HttpContext.Current.User.IsInRole()实际调用的文档,IsUserInRole()对于所有提供者的所有此类方法.
我知道它应该是显而易见的(IsInRole()和IsUserInRole()是如此相似),但我的询问动机是看到并了解其他类型的可用的快捷方式,我甚至都不知道的.我有一种感觉,我已经多次重新发明了轮子,我甚至都不知道.
c# asp.net asp.net-membership roleprovider membership-provider
通用会员提供商的源代码是否可用?该项目是开源的吗?更清楚的是,我在谈论Nuget提供的System.Web.Providers.dll:(http://nuget.org/packages/Microsoft.AspNet.Providers/)
该DLL似乎不是Codeplex上托管的ASP.NET源代码的一部分.但也许它可以从其他地方获得?
这是我的web.config:
<membership defaultProvider="CustomizedMembershipProvider">
<providers>
<clear />
<add name="CustomizedMembershipProvider"
connectionStringName="MYbdName"
applicationName="/" type="System.Web.Security.SqlMembershipProvider"
requiresQuestionAndAnswer="false"
passwordFormat="Clear"
enablePasswordRetrieval="true"
requiresUniqueEmail="true"
minRequiredPasswordLength="4"
minRequiredNonalphanumericCharacters="0" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
我甚至硬编码了用户名和密码:
bool b = Membership.ValidateUser("user@mail.com", "pass123");
Run Code Online (Sandbox Code Playgroud)
当我在数据库上执行选择时,我得到了正确的用户.
用户isAproved = true
用户isLockedout = 0
c# ×5
asp.net ×4
asp.net-mvc ×1
membership ×1
ninject ×1
ninject.web ×1
roleprovider ×1
sql ×1
web-config ×1
webmatrix ×1