asp.net-mvc-4 – 如何在MVC 4中创建自定义WebSecurity.Login和WebSecurity.
|
当我们选择New Project – > MVC 4 – >互联网应用,它将自动为我们生成AccountController.在这个控制器中,我只关心2个操作,登录和注册. 在MVC 3中,它使用Membership的静态方法,ValidateUserin Login操作和CreateUser在Register中.所以,如果我想将它与我自己的数据库集成,我只需要创建CustomMembershipProvider通过扩展MembershipProvider并覆盖这两个方法. 但是在MVC 4中,它使用WebSecurity.Login和WebSecurity.CreateUserAndAccount.我的问题是: >如何使用我自己的数据库,就像我在MVC 3中一样? 非常感谢你的帮助. 解决方法您将需要实现您自己的会员和角色提供商.自定义提供者 namespace MyApp.Helpers
{
public class CustomProviderProvider : SimpleMembershipProvider
{
public override MembershipUser GetUser(string username,bool userIsOnline)
{
return base.GetUser(username,userIsOnline);
}
public override bool ValidateUser(string username,string password)
{
return true; // base.ValidateUser(username,password);
}
}
}
你只需要覆盖你想要“拦截”的方法(即ValidateUser).您还需要在web.config文件中注册提供程序: <system.web>
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData" />
<add name="CustomMembershipProvider" type="MyApp.Helpers.CustomMembershipProvider,MyApp" />
</providers>
</membership>
</system.web>
你也应该有一个名为“InitializeSimpleMembershipAttribute”的过滤器 namespace CustomPortal.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,AllowMultiple = false,Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer,ref _isInitialized,ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<CustomPortalContext>(null);
try
{
using (var context = new CustomPortalContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
//Here is where you give it your connection string name
WebSecurity.InitializeDatabaseConnection("CustomPortal","UserProfile","UserId","EmailAddress",autoCreateTables: true);
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information,please see http://go.microsoft.com/fwlink/?LinkId=256588",ex);
}
}
}
}
}
我希望这有帮助… (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net 2.0中利用Ajax2.0实现JSON传送大量页面数据
- 在ASP.NET Core中相关的ConfigureAwait(false)?
- 如何返回404状态,无效参数传递给我的ASP.NET MVC控制器?
- 在不可见的asp.net面板中阻止数据绑定
- asp.net-mvc – nhibernate:具有相同标识符值的不同对象已
- ASP.NET C#,需要按两次按钮才能发生一些事情
- asp.net-mvc – 城堡温莎IoC在一个MVC应用程序
- ASP.NET云应用程序与普通的ASP.NET
- asp.net-core – 当前的运行时目标框架与项目不兼容
- 当空的asp.net时,ListView LayoutTemplate不显示
- asp.net-mvc – ASP.NET MVC – ModelState.IsVa
- asp.net – coldfusion和.net上的单点登录
- asp.net – MVC5中IdentityDbContext和IdentityD
- asp.net-mvc-5 – 确认邮件中的aspnet身份无效令
- 强制ASP.NET文本框以$符号显示货币
- asp.net-4.0 – 我可以强制asp设置与id相同的名称
- asp.net-mvc – 如何在backbone.js中保存模型集合
- asp.net-mvc – MVC Ajax.Beginform OnComplete
- 使用StateServer的ASP.NET会话混合(SCARY!)
- asp.net-mvc – ASP.NET MVC Html.DropDownList由
