自定义成员资格提供商的放大器; MVC 4 [英] Custom Membership provider & MVC 4

查看:178
本文介绍了自定义成员资格提供商的放大器; MVC 4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是该解决方案继续:<一href=\"http://stackoverflow.com/questions/14412279/how-to-configure-ninject-for-mvc4-custom-membership-provide\">How配置Ninject为MVC4&安培;自定义成员资格提供?

Continue from this solution : How to configure Ninject for MVC4 & custom Membership provide?

我宣布

public interface IUserRepository : IRepository<UserModel>
{
MembershipUser CreateUser(string username, ... , string providername = null);

void Logout();
Boolean Login(string userName, string Password, bool persistCookie = false);
bool RegisterUser(UserModel user);
}

和内实施 UserRepository

public class UserRepository : RepositoryBase<MyDbContext, UserModel>, IUserRepository
{
        UserModel _user = null;

        public UserRepository(IUnitOfWork<MyDbContext> unitOfWork)
            : base(unitOfWork)
{

}

   public MembershipUser CreateUser(string username, ... , string providername = null)
        {                
            using (UnitOfWork)
            {                   
                _user = new UserModel
                {
                    Id = Guid.NewGuid(),
                    RoleId = roleId
                    [other property set]
                };    
                Insert(_user);
                UnitOfWork.Commit();
             }
                status = MembershipCreateStatus.Success;

                return new MembershipUser(providername, ...);
}

public bool RegisterUser(UserModel user)
{
        MembershipCreateStatus createStatus;
        CreateUser(user.UserName, user.Password, user.Email, user.PasswordQuestion, user.PasswordAnswer, user.IsApproved, null, out createStatus, ...);

   if (createStatus == MembershipCreateStatus.Success)
   {
                    return true;
   }
   else
   {                return false;
   }
}
[..]

现在内CustomMembership提供商

Now within CustomMembership Provider

public class CustomMembershipProvider : MembershipProvider
    {

        public IUserRepository UserRepository { get { return DependencyResolver.Current.GetService<IUserRepository>(); } }

    public override MembershipUser CreateUser(string username, ...)
        {
            return UserRepository.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status, Membership.Provider.Name);
        }
[...]

现在在控制器

public AccountController(IAccountRepository accountRepository, IUserRepository userRepository, IUnitOfWork<MyDbContext> unitOfWork)
{
            _acountRepository = accountRepository;
            _userRepository = userRepository;
            UnitOfWork = unitOfWork;
}

public ActionResult Register(UserModel model)
{
    if (ModelState.IsValid)
    {
      _userRepository.RegisterUser(model);
    }
}

注意:

1 我得到了错误提供程序名称的从UserRepository CREATEUSER方法此行返回新的MembershipUser (的ProviderName,...);

1. I got the Error Provider name is Null from UserRepository CreateUser method from this line return new MembershipUser(providername,...);.

不过,我已经 customMembership 提供商内部把它作为 Membership.Provider.Name

But I already pass it as Membership.Provider.Name within customMembership provider.

2 什么是调用有道的MembershipProvider 的方法控制器

2. What is the proper way to call Membershipprovider method from Controller ?

3 与任何其他的 Ninject 配置通过调用成员资格提供方法所需的 IUserRepository ,其他的吼叫?

3. Is the any other Ninject configuration required to call Membership provider method via IUserRepository, other that bellow ?

 kernel.Bind<IUserRepository>().To<UserRepository>();

4。的Web.config的<一个href=\"http://stackoverflow.com/questions/14412279/how-to-configure-ninject-for-mvc4-custom-membership-provide\">$p$pvious帖子

4. Web.config as previous post

推荐答案

在Web.Config中是这样的....你告诉会员供应商,供应商使用。
在这种情况下,您的自定义提供商。
但是我不知道为什么ninject扮演这一概念的作用,所以不能帮助有这方面很抱歉。
客户供应商必须知道自己的名字。但几乎没有一个问题。
在Web.config具有自定义供应商的名称。所以,配置不难codeD。

In Web.Config something like this.... You tell Membership provider with provider to use. In this case your custom provider. But im not sure why ninject plays a role in this concept, so cant help with that aspect sorry. The customer provider MUST know its own name. But hardly an Issue. The Web.config has the name of the custom provider. So config not hard coded.

 <membership defaultProvider="YourProvider" userIsOnlineTimeWindow="5">
  <providers>
    <!--attribute names in camelCase version of .net class MembershipProvider Properties. http://msdn.microsoft.com/en-us/library/system.web.security.membership_properties
    See BOS class for constants : BOSSysConst 
        type = Implmenting provider class  namespace.Classname 
    How to configure membership providers...    http://msdn.microsoft.com/en-us/library/6e9y4s5t -->
    <add name="YourProvider" 
         type="YourNamespace.YourProvider"     
         connectionStringName="YourConnectionString"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="true"
         passwordFormat="Hashed"
         applicationName="IMPORTANT" />
  </providers>
</membership>

控制器要求的createUser静态类的 Membership.CreateUser
Membership.ValidateUser 登录。

有关implmenting自定义提供查看详细信息
http://msdn.microsoft.com/en -us /库/ 44w5aswa%28V = VS.100%29.aspx

For details on implmenting a custom provider see http://msdn.microsoft.com/en-us/library/44w5aswa%28v=vs.100%29.aspx

    // Sample calling the create user function  
    // POST: /Account/Register

    [AllowAnonymous]
    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

这篇关于自定义成员资格提供商的放大器; MVC 4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆