我的问题是,在使用asp.net mvc时,是否可以构建客户成员资格和角色提供者(覆盖asp.net提供者)?
我猜这是可能的,但没有看到任何有关它的信息.
它会以与asp.net相同的方式完成吗?只需将web.config更改为指向新提供程序,然后提供覆盖方法?
我发现很多文章讨论改变成员资格和角色提供者的数据源,但我不喜欢asp.net使用的表,所以我通常使用自己的表结构.
如果你有任何文章或链接谈论这将是伟大的.
我使用razor引擎创建了asp.net mvc4应用程序,我是这项技术的新手,并尝试找出一种在管理员登录后向管理员显示注册用户列表的方法.成员资格使用system.web.providers.任何人都可以告诉 - 首先如何为用户创建单独的角色,管理员使用实体框架其次如何获取并显示具有不同角色的所有注册用户的列表给管理员.
提前致谢.问候
我必须为我当前的ASP .Net项目创建一个自定义成员资格提供程序,以便适应我们的数据库架构,并且在配置它时如果他们的密码错误三次就会锁定用户时出现问题,这是由标准供应商.
这是我需要自己实现的东西,还是本来应该得到支持?
我没有专门处理它的代码(并且没有任何接口成员似乎专门处理它),但如果我需要自己实现它,我该如何通知用户他们被锁定?我需要在ValidateUser中引发某种异常吗?
解
惭愧我无法标记两个答案,Dave R提供的链接深入了解了会员的工作方式,Zhaph指出的是我最终做的事情,处理自定义会员提供商中的锁定逻辑.
然后,我使用Login控件的LoginError事件处理错误情况,并在那里检查以查看用户是否被锁定以显示相应的错误消息.
我的类派生自System.Web.Security.MembershipUser我在提交表单时收到此错误.弹出窗体使用ASPPDF,并且在实现自定义MembershipProvider好东西之前应用程序没有此问题.请注意,这只是一个调试错误.当我没有调试时它似乎工作.有谁知道我怎么解决这个问题?
检测到NonComVisibleBaseClass消息:发出QueryInterface调用,请求COM可见托管类'XyAmpUser'的默认IDispatch接口.但是,由于此类没有显式的默认接口,并且派生自非COM可见类'System.Web.Security.MembershipUser',因此QueryInterface调用将失败.这样做是为了防止非COM可见基类受COM版本控制规则的约束.
谢谢,〜在圣地亚哥
asp.net pdf-generation membership-provider membershipuser visual-studio
我是ASP.NET和C#的新手我花了一天时间学习ASP.NET成员资格提供程序的基础知识我已经构建了所有的验证程序,但是在页面上输出我的错误消息时遇到了困难.
private void LogCreateUserError(MembershipCreateStatus status, string username)
{
string reasonText = status.ToString();
switch (status)
{
case MembershipCreateStatus.DuplicateEmail:
case MembershipCreateStatus.DuplicateProviderUserKey:
case MembershipCreateStatus.DuplicateUserName:
reasonText = "The user details you entered are already registered.";
break;
case MembershipCreateStatus.InvalidAnswer:
case MembershipCreateStatus.InvalidEmail:
case MembershipCreateStatus.InvalidProviderUserKey:
case MembershipCreateStatus.InvalidQuestion:
case MembershipCreateStatus.InvalidUserName:
case MembershipCreateStatus.InvalidPassword:
reasonText = string.Format("The {0} provided was invalid.", status.ToString().Substring(7));
break;
default:
reasonText = "Due to an unknown problem, we were not able to register you at this time";
break;
}
//CODE TO WRITE reasonText TO THE HTML …Run Code Online (Sandbox Code Playgroud) 我正在ASP.NET/C#中设计一个Web应用程序,其中每个注册用户都可以根据用户ID添加/修改/删除行.
举个例子:
我将在/route.aspx?routeid=854属于我的页面上编辑我的路线(user-id:1).
但因为我是一个好奇的家伙,我尝试访问/route.aspx?routeid=855哪个属于另一个用户(user-id:2).
如何才能最好地避免人们访问其他人的数据?我应该在每次数据库调用时发送每个用户ID(来自会话),我应该在每次加载页面时验证用户/密码还是最好和最安全的方法是什么?
我希望我说得够清楚.
我正在努力实现一个自定义成员资格提供程序,它可以对付我数据库中的现有模式,并且有一些想法/问题.
登录控件将自动调用成员资格提供程序的ValidateUser方法,因此无论我如何实现提供程序,登录控件唯一关心的是此方法返回的bool值.令我困惑的是,登录尝试失败可能有很多原因; 用户被锁定,在一段时间内尝试了太多等等.我无法将其传达给控件,因此它可以显示正确的消息.成员提供者的其他属性,如PasswordStrengthRegularExpression,对登录控制也没有任何影响(开箱即用),我希望它会自动以某种方式转换为正则表达式验证器,但这似乎不是案件.
如果Login控件开箱即用的唯一内容(没有手动处理事件并按上述方式进行初始化)是调用成员资格提供程序上的ValidateUser方法,我看不到为什么验证会返回Login控件失败甚至做某些事情,比如根据某个时间窗口限制验证请求.最后我的问题是为什么我甚至会使用会员提供商与登录控制一起使用?看起来它只是针对Yes/No类型响应而设计的,这是非常严格的.
除非我的假设出错,否则Login控件作为成员资格API之间的界面似乎过于严格,无法使用.也许API更适合其他auth控件,如ChangePassword更好,但对于实际的Login控件,我没有看到重点.
我很感激你的想法.
我正在尝试创建一个自定义成员资格提供程序,以便将Umbraco中的用户验证到Umbraco之外的现有数据库.从我到目前为止所学到的,创建一个继承umbraco.providers.members.UmbracoMembershipProvider并覆盖ValidateUser()函数的类应该没有多少工作量 .
我想知道当我希望将这个类包含在我的Umbraco项目中而不是在web.config文件中指定它时我应该怎么做?是否有可能以这种方式扩展Umbraco,重新编译源代码?
编辑 - 我写了一篇关于我如何在http://marcus-abrahamsson.se/post/Membership-Provider-in-Umbraco上实现这一点的文章
我只是想请求帮助以使我的方案工作?我想使用PasswordResetToken获取UserName.
这是我的情景.
当用户单击链接时.我将只查询请求["token"]以获取用户名,然后将允许用户更改密码和自动登录.
这是我的代码如下:
public ActionResult ChangePassword()
{
ChangePasswordModel model = new ChangePasswordModel();
string token=string.Empty;
try
{
token = Request["token"].ToString();
int userId = WebSecurity.GetUserIdFromPasswordResetToken(token);
if (userId > 0)
{
//Get the user object by (userid)
//???????????????????
//???????????????????
}
else
{
throw new Exception("The change password token has expired. Please go to login page and click forgot password again.");
}
}
catch
{
model.HasError = true;
ModelState.AddModelError("", "The change password token has expired. Please go to login page and …Run Code Online (Sandbox Code Playgroud)我正在尝试为 passwords实现一个自定义存储。在更改密码之前,我需要先检查密码是否已被用户使用过8 次。
var hashingAlgorithm = ConfigurationManager.AppSettings("MembershipProviderHashAlgorithm");
var hashedPasswordDetails = pwdHistory.GetRecentPasswordDetails(userName);
foreach (var passwordDetails_loopVariable in hashedPasswordDetails)
{
passwordDetails = passwordDetails_loopVariable;
var encodedPassword = pwdEncr
.EncodePassword(proposedNewPassword, passwordDetails.Salt, hashingAlgorithm);
var hashedPassword = passwordDetails.HashedPassword;
if (hashedPassword.Equals(encodedPassword)) //This line always return FALSE.
{
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是从表中返回的密码总是与我输入的密码不同(事件清楚时相同)。那是因为哈希算法。
我试过 SHA 和 SHA1 没有运气。ASP.NET 成员资格是否使用特定的散列算法?我正在使用System.Web.Security.SqlMembershipProvider 版本 4.0.0.0
<add key="MembershipProviderHashAlgorithm" value="SHA" />
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
这是web.config 中成员资格部分的部分配置。有没有办法判断正在使用哪种算法。
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add …Run Code Online (Sandbox Code Playgroud)