如何基于ASP.NET成员资格提供程序为ASP.NET MVC 2创建自定义成员资格?
c# asp.net asp.net-mvc membership-provider custom-membershipprovider
我目前正在将一个非常古老但经常工作的ASP网站转换为ASP.Net.
它有一个完全自定义的书面用户管理系统.虽然它工作正常,但它确实需要刷新,因为我希望它对于未来的一些项目更加灵活.
当我向某人询问此事时,他们说"你需要使用微软提供商",并就微软如何免费发布所有这些东西以及它们有多好,应该尽可能多地使用它们做了演讲.
我已经对它进行了相当多的研究(主要是关于http://asp.net/learn上的视频),并且对一些功能印象非常深刻,因为似乎会有物品的拖放组件我的年龄要写.
但是,当前的成员资格数据库很难解释,它是一个完全自定义编写的数据库,它有许多内部关系......它与默认的Microsoft Provider并不真正"兼容".
我已经看过如何:创建自定义成员资格提供程序?,但我感到有点偏离了我的舒适区,并担心它会变慢,引入安全漏洞或根本无法工作.
在一天结束时,Microsoft成员资格提供程序应该为我工作 - 我真正需要的唯一自定义是登录使用我的数据库中的用户名/密码字段和创建用户脚本,其中有很多自定义代码到几个政党系统(需要提供服务等).
我只是想知道,如果遇到类似情况你会怎么做?
使用Microsoft成员资格提供程序,并以某种方式让它为您工作(虽然我想建议)
使用Microsoft成员资格提供程序,但使用围绕代码自定义的自定义提供程序.
使用您自己完全定制的解决方案
asp.net asp.net-membership membership-provider custom-membershipprovider
嗨,我使用自定义MembershipProvider.
我想知道应用程序场景中的当前用户名,但是当我尝试访问HttpContext.Current.User.Identity.Name时,它总是返回string.Empty.
if (Membership.ValidateUser(tbUsername.Text, tbPassword.Text))
{
FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""
FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, cbRememberMe.Checked);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
当我们选择时New Project --> MVC 4 --> Internet Application
,它会自动为我们生成AccountController.在这个控制器中,我只关心2个动作,Login
并且Register
.
在MVC 3中,它使用了Membership的静态方法,ValidateUser
在Login
行动中和CreateUser
在Register
.所以,如果我想将它与我自己的数据库集成,我只需要CustomMembershipProvider
通过扩展MembershipProvider
和覆盖这两种方法来创建.
但在MVC 4中,它使用WebSecurity.Login
和WebSecurity.CreateUserAndAccount
.我的问题是:
WebSecurity
?非常感谢你的帮助.
我创建了一个自定义成员资格提供程序,并在尝试创建新的"MembershipUser"时收到以下错误.
无法从程序集"System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"加载类型"MyTestApp.Membership.TestMembershipProvider".
我从一个单元测试项目运行它,所以我不确定是否会导致问题,但我确实包括System.Web,System.Web.ApplicationServices以及对MyApp.Membership和MyApp.DataModels(实体)的引用对象).
错误发生在我的"GetUser"函数里面,我的配置也在下面.
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
try
{
AccountEntities db = new AccountEntities();
if ((providerUserKey is Guid) == false)
{
return null;
}
User user = (from u in db.Users
where u.UserId == (Guid)providerUserKey
&& u.Application.LoweredApplicationName == this.ApplicationName.ToLower()
select u).FirstOrDefault();
if (user != null)
{ // ERROR: Starts here, user object is correct, data is all there.
return new MembershipUser(this.ProviderName, user.UserName, (object)user.UserId, user.Email, user.PasswordQuestion, user.Comment, user.IsApproved, user.IsLockedOut, user.CreateDate, …
Run Code Online (Sandbox Code Playgroud) asp.net unit-testing custom-membershipprovider c#-3.0 c#-4.0
我发现了一些与我发布的问题相似的问题,但我并没有从他们那里得到我真正需要的东西.我仍然在努力实现我的CustomMembershipProvider
使用Microsoft Unity DI
.
定制会员:
public class CustomMembershipProviderService : MembershipProvider
{
private readonly IUserService _userService;
public CustomMembershipProviderService(IUserService userService)
{
this._userService = userService;
}
public override string ApplicationName
{
...
Run Code Online (Sandbox Code Playgroud)
用户服务:
public class UserService : IUserService
{
private readonly IUserRepository _repository;
private readonly IUnitOfWork _unitOfWork;
public UserService(IUserRepository repository, IUnitOfWork unitOfWork)
{
this._repository = repository;
this._unitOfWork = unitOfWork;
}
...
Run Code Online (Sandbox Code Playgroud)
的AccountController:
public class AccountController : Controller
{
// next line is what I don't feel too sure about what …
Run Code Online (Sandbox Code Playgroud) dependency-injection unity-container repository-pattern custom-membershipprovider asp.net-mvc-3
我正在为我的.net应用程序实现自定义成员资格提供程序.我已经设置了最少数量的字符和非字母数字字符的配置,但它似乎无论如何都要通过密码,即使它们违反了规则.
OnValidatingPassword是一种虚方法.Microsoft的示例不会覆盖该方法.
这个问题解决了同样的问题,但作者放弃了对他的问题的答案,并简单地覆盖了这个功能.这个答案表明,人们不必重写函数来使其工作.
基本功能没有做任何事情吗?当我重写OnValidatePassword,并简单地调用基类时,我的函数被命中,但它永远不会拒绝我太简单的密码.
代码示例(使用自定义CreateUser函数)
protected override void OnValidatingPassword(ValidatePasswordEventArgs e)
{
base.OnValidatingPassword(e);
}
//
// MembershipProvider.CreateUser
//
public MembershipUser CreateUser(string username, string password, string globalIdentifier, string firstName, string lastName,
string birthDate, object providerUserKey, out MembershipCreateStatus status)
{
ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, password, true);
OnValidatingPassword(args);
if (args.Cancel)
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
Run Code Online (Sandbox Code Playgroud) .net asp.net-membership membership-provider custom-membershipprovider
我已经使用NHibernate为我的MVC 3 ASP.NET项目创建了一个自定义成员资格提供程序.
我在User类中遇到了一些问题.我收到以下错误:
无法确定类型:FluentNHibernateMembershipProvider.Models.User,FluentNHibernateMembershipProvider,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null,对于列:NHibernate.Mapping.Column(User)
我打电话时发生错误:
_sessionFactory = cfg.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
User.cs文件如下所示:
namespace FluentNHibernateMembershipProvider.Models
{
public class User
{
public virtual int UserId { get; protected set; }
public virtual string Username { get; set; }
public virtual DateTime CreateDate { get; set; }
public virtual string ConfirmationToken { get; set; }
public virtual bool IsConfirmed { get; set; }
public virtual DateTime LastPasswordFailureDate { get; set; }
public virtual int PasswordFailuresSinceLastSuccess { get; set; } …
Run Code Online (Sandbox Code Playgroud) c# asp.net nhibernate fluent-nhibernate custom-membershipprovider
作为MVC框架的新手,我正在尝试建立一个可以支持组或部门概念的自定义成员资格提供程序.
我需要指定每个用户属于几个组中的一个(并且只有一个) - 每个组(及其成员)只能查看属于它的记录 - 由GroupId标识.
我需要以某种方式保存该组识别中的用户配置文件,这样当他们登录和呼叫(例如)控制器,该组识别符号传递然后将过滤用户可以看到记录在索引方法.
我确信这是一种直截了当的方法,但我似乎有一个精神障碍.
任何见解都会有所帮助(并且可能非常简单!)
罗杰
好的,所以我几个小时都在研究这个问题.我在这里发现了几个帖子,但实际上没有解决问题.那么,让我再试一次......
我有一个使用Ninject和自定义成员资格提供程序的MVC2应用程序.
如果我尝试使用ctor注入提供程序,我会收到一个错误:'没有为此对象定义无参数构造函数.'
public class MyMembershipProvider : MembershipProvider
{
IMyRepository _repository;
public MyMembershipProvider(IMyRepository repository)
{
_repository = repository;
}
Run Code Online (Sandbox Code Playgroud)
我也一直在玩工厂和Initialize(),但一切都空白了.
有什么想法/例子吗?
asp.net ×6
asp.net-mvc ×2
c# ×2
.net ×1
c#-3.0 ×1
c#-4.0 ×1
httpcontext ×1
iidentity ×1
nhibernate ×1
ninject ×1
unit-testing ×1