实现自定义和的MembershipUser自定义的MembershipProvider [英] Implement Custom MembershipUser and Custom MembershipProvider

查看:169
本文介绍了实现自定义和的MembershipUser自定义的MembershipProvider的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试实现自定义MembershipPriver使用自定义中的MembershipUser我自己的数据库(一个具体用户表模型):

这是LY diffent文件:

iTwitterMembershipProvider.cs

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.Security;
使用System.Collections.Specialized;
使用iTwitter.Models;
 公共类iTwitterMembershipProvider:的MembershipProvider
{    公众覆盖字符串的应用程序名称
    {
        {返回_ApplicationName; }
        集合{_ApplicationName =价值; }
    }    公众覆盖布尔的ChangePassword(用户名字符串,字符串旧密码,串NEWPASSWORD)
    {
        抛出新NotImplementedException();
    }    公众覆盖布尔ChangePasswordQuestionAndAnswer(用户名字符串,字符串密码,串newPasswordQuestion,串newPasswordAnswer)
    {
        返回false;
    }    公众覆盖iTwitterMembershipUser CREATEUSER(字符串登录,
                                                      串密码,
                                          字符串电子邮件,
                                          串tokenKey,
                                          串tokenSecret,
                                          串twitterUserId,
                                          对象providerUserKey,
                                          出MembershipCreateStatus状态)
    {
        ValidatePasswordEventArgs ARGS =新ValidatePasswordEventArgs(登录,
                                                                       密码,
                                                                       真正);        OnValidatingPassword(参数);        如果(args.Cancel)
        {
            状态= MembershipCreateStatus.InvalidPassword;
            返回null;
        }        如果(RequiresUniqueEmail&放大器;&放大器;!GetUserNameByEmail(电子邮件)=)
        {
            状态= MembershipCreateStatus.DuplicateEmail;
            返回null;
        }        iTwitterMembershipUser U =的getUser(登录,FALSE);        如果(U == NULL)
        {
            UserRepository _user =新UserRepository();            _user.CreateUser(登录名,密码,电子邮件);
            状态= MembershipCreateStatus.Success;            返回的getUser(登录,FALSE);
        }
        其他
        {
            状态= MembershipCreateStatus.DuplicateUserName;
        }        返回null;
    }    公众覆盖布尔DeleteUser(用户名字符串,布尔deleteAllRelatedData)
    {
        抛出新NotImplementedException();
    }    公众覆盖布尔enablePasswordReset设置
    {
        {返回_EnablePasswordReset; }
    }    公众覆盖布尔EnablePasswordRetrieval
    {
        {返回_EnablePasswordRetrieval; }
    }    公众覆盖MembershipUserCollection FindUsersByEmail(字符串emailToMatch,诠释的PageIndex,诠释的pageSize,OUT INT总记录)
    {
        抛出新NotImplementedException();
    }    公众覆盖MembershipUserCollection FindUsersByName(字符串的usernameToMatch,诠释的PageIndex,诠释的pageSize,OUT INT总记录)
    {
        抛出新NotImplementedException();
    }    公众覆盖MembershipUserCollection GetAllUsers(INT的PageIndex,诠释的pageSize,OUT INT总记录)
    {
        抛出新NotImplementedException();
    }    公共覆盖INT GetNumberOfUsersOnline()
    {
        抛出新NotImplementedException();
    }    公众覆盖字符串用户注册忘记密码(用户名字符串,字符串的答案)
    {
        抛出新NotImplementedException();
    }    公众覆盖iTwitterMembershipUser的getUser(字符串登录,布尔userIsOnline)
    {
        UserRepository _user =新UserRepository();        返回_user.GetUser(登录);
    }    公众覆盖的MembershipUser的getUser(对象providerUserKey,布尔userIsOnline)
    {
        抛出新NotImplementedException();
    }    公众覆盖字符串GetUserNameByEmail(字符串email)
    {
        UserRepository _user =新UserRepository();        返回_user.GetUserNameByEmail(电子邮件);
    }    公共覆盖INT MaxInvalidPasswordAttempts
    {
        {返回_MaxInvalidPasswordAttempts; }
    }    公共覆盖INT MinRequiredNonAlphanumericCharacters
    {
        {返回_MinRequiredNonalphanumericCharacters; }
    }    公共覆盖INT MinRequiredPasswordLength
    {
        {返回_MinRequiredPasswordLength; }
    }    公共覆盖INT PasswordAttemptWindow
    {
        {返回_PasswordAttemptWindow; }
    }    公众覆盖MembershipPasswordFormat了passwordFormat
    {
        {返回_PasswordFormat; }
    }    公共重写字符串PasswordStrengthRegularEx pression
    {
        {返回_PasswordStrengthRegularEx pression; }
    }    公众覆盖布尔RequiresQuestionAndAnswer
    {
        {返回_RequiresQuestionAndAnswer; }
    }    公众覆盖布尔RequiresUniqueEmail
    {
        {返回_RequiresUniqueEmail; }
    }    公众覆盖字符串ResetPassword(用户名字符串,字符串的答案)
    {
        抛出新NotImplementedException();
    }    公众覆盖布尔UnlockUser(用户名字符串)
    {
        抛出新NotImplementedException();
    }    公共覆盖无效UpdateUser两个(用户的MembershipUser)
    {
        抛出新NotImplementedException();
    }    公众覆盖布尔的ValidateUser(字符串登录,串密码)
    {
        如果(登录密码==)
        {
            返回true;
        }
        其他
        {
            返回false;
        }
    }
    //
    //一个辅助函数从配置文件中检索配置值。
    //    私人字符串GetConfigValue(字符串configValue,串设置defaultValue)
    {
        如果(string.IsNullOrEmpty(configValue))
            返回设置defaultValue;        返回configValue;
    }    //
    //从web.config文件属性,默认情况下所有为False
    //
    私人字符串_ApplicationName;
    私人布尔_EnablePasswordReset;
    私人布尔_EnablePasswordRetrieval = FALSE;
    私人布尔_RequiresQuestionAndAnswer = FALSE;
    私人布尔_RequiresUniqueEmail = TRUE;
    私人诠释_MaxInvalidPasswordAttempts;
    私人诠释_PasswordAttemptWindow;
    私人诠释_MinRequiredPasswordLength;
    私人诠释_MinRequiredNonalphanumericCharacters;
    私人字符串_PasswordStrengthRegularEx pression;
    私人MembershipPasswordFormat _PasswordFormat = MembershipPasswordFormat.Hashed;    公共覆盖无效初始化(字符串名称,NameValueCollection中配置)
    {
        如果(配置== NULL)
            抛出新的ArgumentNullException(配置);        如果(名称== NULL || name.Length == 0)
            NAME =CustomMembershipProvider;        如果(String.IsNullOrEmpty(配置[说明]))
        {
            config.Remove(说明);
            config.Add(说明,自定义成员资格提供程序);
        }        base.Initialize(名称,配置);        _ApplicationName = GetConfigValue(配置[的applicationName],
                      System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
        _MaxInvalidPasswordAttempts = Convert.ToInt32(
                      GetConfigValue(配置[maxInvalidPasswordAttempts],5));
        _PasswordAttemptWindow = Convert.ToInt32(
                      GetConfigValue(配置[passwordAttemptWindow],10));
        _MinRequiredNonalphanumericCharacters = Convert.ToInt32(
                      GetConfigValue(配置[minRequiredNonalphanumericCharacters]中,1));
        _MinRequiredPasswordLength = Convert.ToInt32(
                      GetConfigValue(配置[minRequiredPasswordLength],6));
        _EnablePasswordReset = Convert.ToBoolean(
                      GetConfigValue(配置[enablePasswordReset设置],真));
        _PasswordStrengthRegularEx pression = Convert.ToString(
                       GetConfigValue(配置[passwordStrengthRegularEx pression],));    }
}

iTwitterMembershipUser.cs

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.Security;
使用iTwitter.Models;命名空间iTwitter.Models
{
    公共类iTwitterMembershipUser:的MembershipUser
    {
        私人字符串_tokenKey;
        私人字符串_tokenSecret;
        私人字符串_twitterUserId;
        私人字符串_login;
        私人字符串_EMAIL;
        私人诠释_providerUserKey;        公共字符串tokenKey
        {
            {返回_tokenKey; }
            集合{_tokenKey =价值; }
        }        公共字符串tokenSecret
        {
            {返回_tokenSecret; }
            集合{_tokenSecret =价值; }
        }        公共字符串twitterUserId
        {
            {返回_twitterUserId; }
            集合{_twitterUserId =价值; }
        }        公共字符串登录
        {
            {返回_login; }
            集合{_login =价值; }
        }        公共字符串的电子邮件
        {
            {返回_EMAIL; }
            集合{_EMAIL =价值; }
        }        公众诠释providerUserKey
        {
            {返回_providerUserKey; }
            集合{_providerUserKey =价值; }
        }        公共iTwitterMembershipUser(对象的providerName,
                                  串登录,
                                  INT providerUserKey,
                                  字符串电子邮件,
                                  串tokenKey,
                                  串tokenSecret,
                                  串twitterUserId)
        {
            this.tokenKey = tokenKey;
            this.tokenSecret = tokenSecret;
            this.twitterUserId = twitterUserId;
            this.login =登录;
            this.providerUserKey = providerUserKey;
            this.email =电子邮件;
        }
    }
}

webconfig.cs

 <?XML版本=1.0&GT?;<! - 
  有关如何配置ASP.NET应用程序的更多信息,请访问:
  http://go.microsoft.com/fwlink/?LinkId=152368
   - ><结构>
  <&是connectionStrings GT;
  <添加名称=iTwitterDB connectionString=\"metadata=res://*/Models.iTwitter.csdl|res://*/Models.iTwitter.ssdl|res://*/Models.iTwitter.msl;provider=System.Data.SqlClient;provider连接字符串=安培; QUOT;数据源= \\ SQLEX $ P $干燥综合征。AttachDbFilename = | DataDirectory目录| \\ iTwitter.mdf;集成安全=真;用户实例=真; MultipleActiveResultSets =真放; QUOT;的providerName =系统。 Data.EntityClient/>< /&是connectionStrings GT;  <&的System.Web GT;
    <编译调试=真targetFramework =4.0>
      <&集会GT;
        <添加组件=System.Web.Abstractions,版本= 4.0.0.0,文化=中性公钥= 31BF3856AD364E35/>
        <添加组件=System.Web.Routing,版本= 4.0.0.0,文化=中性公钥= 31BF3856AD364E35/>
        <添加组件=System.Web.Mvc,版本= 2.0.0.0,文化=中性公钥= 31BF3856AD364E35/>
      <添加组件=System.Data.Entity的,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089/>< /组件>
    < /编译>    <身份验证模式=表格>
      <形式loginUrl =〜/帐号/登录超时=2880/>
    < /认证>    <会员defaultProvider =CustomMembershipProvider>
      <供应商>
        <清/>
        <添加名称=CustomMembershipProviderTYPE =iTwitterMembershipProvider的connectionStringName =iTwitterDBenablePasswordRetrieval =假enablePasswordReset设置=真requiresQuestionAndAnswer =假requiresUniqueEmail =假maxInvalidPasswordAttempts =5minRequiredPasswordLength =6minRequiredNonalphanumericCharacters = 0passwordAttemptWindow =10的applicationName =//>
      < /供应商>
    < /会员>    <型材>
      <供应商>
        <清/>
        <添加名称=AspNetSqlProfileProviderTYPE =System.Web.Profile.SqlProfileProvider的connectionStringName =iTwitterDB的applicationName =//>
      < /供应商>
    < / profile文件>    < roleManager启用=false的>
      <供应商>
        <清/>
        <添加名称=AspNetSqlRoleProviderTYPE =System.Web.Security.SqlRoleProvider的connectionStringName =iTwitterDB的applicationName =//>
        <添加名称=AspNetWindowsTokenRoleProviderTYPE =System.Web.Security.WindowsTokenRoleProvider的applicationName =//>
      < /供应商>
    < / roleManager>    <网页和GT;
      <&命名空间GT;
        <添加命名空间=System.Web.Mvc/>
        <添加命名空间=System.Web.Mvc.Ajax/>
        <添加命名空间=System.Web.Mvc.Html/>
        <添加命名空间=System.Web.Routing/>
      < /命名空间>
    < /页>
  < /system.web>  < system.webServer>
    <验证validateIntegratedModeConfiguration =FALSE/>
    <模块runAllManagedModulesForAllRequests =真/>
  < /system.webServer>  <&运行GT;
    < assemblyBinding的xmlns =瓮:架构 - 微软COM:asm.v1>
      < dependentAssembly>
        < assemblyIdentity名称=System.Web.Mvc公钥=31bf3856ad364e35/>
        < bindingRedirect oldVersion =1.0.0.0NEWVERSION =2.0.0.0/>
      < / dependentAssembly>
    < / assemblyBinding>
  < /运行>
< /结构>

iTwitterDB:

  ID INT
登录VARCHAR(50)
密码为varchar(100)(MD5密码哈希)
电子邮件VARCHAR(100)
tokenKey VARCHAR(100)
tokenSecret VARCHAR(100)
twitterUserId VARCHAR(100)

UserRepository.cs

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.Security;命名空间iTwitter.Models
{
    公共类UserRepository
    {
        公共iTwitterMembershipUser CREATEUSER(字符串登录,密码字符串,字符串email)
        {
            使用(iTwitterDB DB =新iTwitterDB())
            {
                用户用户=新用户();                user.login =登录;
                user.email =电子邮件;
                user.password的=密码;
                user.tokenKey =0;
                user.tokenSecret =0;
                user.twitterUserId =0;                db.AddToUsers(用户);
                db.SaveChanges();                返回的getUser(登录);
            }
        }        公共字符串GetUserNameByEmail(字符串email)
        {
            使用(iTwitterDB DB =新iTwitterDB())
            {
                VAR的结果=从u在db.Users在哪里(u.email ==电子邮件)选择U;                如果(result.Count()!= 0)
                {
                    变种DBUSER = result.FirstOrDefault();                    返回dbuser.login;
                }
                其他
                {
                    返回;
                }
            }
        }        公共iTwitterMembershipUser的getUser(字符串登录)
        {
            使用(iTwitterDB DB =新iTwitterDB())
            {
                VAR的结果=从u在db.Users在哪里(u.login ==登录)选择U;                如果(result.Count()!= 0)
                {
                    变种DBUSER = result.FirstOrDefault();                    字符串_login = dbuser.login;
                    INT _providerUserKey = dbuser.id;
                    字符串_EMAIL = dbuser.email;
                    字符串_tokenKey = dbuser.tokenKey;
                    字符串_tokenSecret = dbuser.tokenSecret;
                    字符串_twitterUserId = dbuser.twitterUserId;
                    iTwitterMembershipUser用户=新iTwitterMembershipUser(CustomMembershipProvider
                                                              _登录,
                                                              _providerUserKey,
                                                              _电子邮件,
                                                              _tokenKey,
                                                              _tokenSecret,
                                                              _twitterUserId);                    返回用户;
                }
                其他
                {
                    返回null;
                }
            }
        }
    }
}

我在编译期间已经有些错误:


  1)'iTwitterMembershipProvider不实现继承的抽象


  
  

成员
  System.Web.MembershiProvider.CreateUser(字符串,
  字符串,字符串,字符串,字符串,布尔值,
  对象out
  System.Web.Security.MembershipCreateStatus)

  2)iTwitterMembershipProvider.CreateUser(字符串,


  
  

字符串,字符串,字符串,字符串,布尔值,
  对象out
  System.Web.Security.MembershipCreateStatus):
  找不到合适的方法来覆盖

  3)'iTwitterMembershipProvider.GetUser(字符串,


  
  

布尔):返回类型必须是
  System.Web.Security.MembershipUser
  匹配重写的成员
  System.Web.Security.MembershipProvider.GetUser(字符串,
  布尔)


我在这里封锁。

感谢您。


解决方案

更改CREATEUSER和的getUser的返回类型的基类的MembershipUser。当调用这些方法你就可以将它转换为类型iTwitterMembershipUser。例如,在CREATEUSER你改变了return语句

 收益率(iTwitterMembershipUser)的getUser(登录);

I try to implement a Custom MembershipPriver with a Custom MemberShipUser in my own database (with a specifics Users Table Model) :

This is ly diffent files :

iTwitterMembershipProvider.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Collections.Specialized;
using iTwitter.Models;


 public class iTwitterMembershipProvider : MembershipProvider
{

    public override string ApplicationName
    {
        get { return _ApplicationName; }
        set { _ApplicationName = value; }
    }

    public override bool ChangePassword(string username, string oldPassword, string newPassword)
    {
        throw new NotImplementedException();
    }

    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
    {
        return false;
    }

    public override iTwitterMembershipUser CreateUser(string login,
                                                      string password,
                                          string email,
                                          string tokenKey,
                                          string tokenSecret,
                                          string twitterUserId,
                                          object providerUserKey,
                                          out MembershipCreateStatus status)
    {
        ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(login,
                                                                       password,
                                                                       true);

        OnValidatingPassword(args);

        if (args.Cancel)
        {
            status = MembershipCreateStatus.InvalidPassword;
            return null;
        }

        if (RequiresUniqueEmail && GetUserNameByEmail(email) != "")
        {
            status = MembershipCreateStatus.DuplicateEmail;
            return null;
        }

        iTwitterMembershipUser u = GetUser(login, false);

        if (u == null)
        {
            UserRepository _user = new UserRepository();

            _user.CreateUser(login, password, email);
            status = MembershipCreateStatus.Success;

            return GetUser(login, false);
        }
        else
        {
            status = MembershipCreateStatus.DuplicateUserName;
        }

        return null;
    }

    public override bool DeleteUser(string username, bool deleteAllRelatedData)
    {
        throw new NotImplementedException();
    }

    public override bool EnablePasswordReset
    {
        get { return _EnablePasswordReset; }
    }

    public override bool EnablePasswordRetrieval
    {
        get { return _EnablePasswordRetrieval; }
    }

    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        throw new NotImplementedException();
    }

    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        throw new NotImplementedException();
    }

    public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
    {
        throw new NotImplementedException();
    }

    public override int GetNumberOfUsersOnline()
    {
        throw new NotImplementedException();
    }

    public override string GetPassword(string username, string answer)
    {
        throw new NotImplementedException();
    }

    public override iTwitterMembershipUser GetUser(string login, bool userIsOnline)
    {
        UserRepository _user = new UserRepository();

        return _user.GetUser(login);
    }

    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    {
        throw new NotImplementedException();
    }

    public override string GetUserNameByEmail(string email)
    {
        UserRepository _user = new UserRepository();

        return _user.GetUserNameByEmail(email);
    }

    public override int MaxInvalidPasswordAttempts
    {
        get { return _MaxInvalidPasswordAttempts; }
    }

    public override int MinRequiredNonAlphanumericCharacters
    {
        get { return _MinRequiredNonalphanumericCharacters; }
    }

    public override int MinRequiredPasswordLength
    {
        get { return _MinRequiredPasswordLength; }
    }

    public override int PasswordAttemptWindow
    {
        get { return _PasswordAttemptWindow; }
    }

    public override MembershipPasswordFormat PasswordFormat
    {
        get { return _PasswordFormat; }
    }

    public override string PasswordStrengthRegularExpression
    {
        get { return _PasswordStrengthRegularExpression; }
    }

    public override bool RequiresQuestionAndAnswer
    {
        get { return _RequiresQuestionAndAnswer; }
    }

    public override bool RequiresUniqueEmail
    {
        get { return _RequiresUniqueEmail; }
    }

    public override string ResetPassword(string username, string answer)
    {
        throw new NotImplementedException();
    }

    public override bool UnlockUser(string userName)
    {
        throw new NotImplementedException();
    }

    public override void UpdateUser(MembershipUser user)
    {
        throw new NotImplementedException();
    }

    public override bool ValidateUser(string login, string password)
    {
        if (login == password)
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    //
    // A helper function to retrieve config values from the configuration file.
    //  

    private string GetConfigValue(string configValue, string defaultValue)
    {
        if (string.IsNullOrEmpty(configValue))
            return defaultValue;

        return configValue;
    }

    //
    // Properties from web.config, default all to False
    //
    private string _ApplicationName;
    private bool _EnablePasswordReset;
    private bool _EnablePasswordRetrieval = false;
    private bool _RequiresQuestionAndAnswer = false;
    private bool _RequiresUniqueEmail = true;
    private int _MaxInvalidPasswordAttempts;
    private int _PasswordAttemptWindow;
    private int _MinRequiredPasswordLength;
    private int _MinRequiredNonalphanumericCharacters;
    private string _PasswordStrengthRegularExpression;
    private MembershipPasswordFormat _PasswordFormat = MembershipPasswordFormat.Hashed;

    public override void Initialize(string name, NameValueCollection config)
    {
        if (config == null)
            throw new ArgumentNullException("config");

        if (name == null || name.Length == 0)
            name = "CustomMembershipProvider";

        if (String.IsNullOrEmpty(config["description"]))
        {
            config.Remove("description");
            config.Add("description", "Custom Membership Provider");
        }

        base.Initialize(name, config);

        _ApplicationName = GetConfigValue(config["applicationName"],
                      System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
        _MaxInvalidPasswordAttempts = Convert.ToInt32(
                      GetConfigValue(config["maxInvalidPasswordAttempts"], "5"));
        _PasswordAttemptWindow = Convert.ToInt32(
                      GetConfigValue(config["passwordAttemptWindow"], "10"));
        _MinRequiredNonalphanumericCharacters = Convert.ToInt32(
                      GetConfigValue(config["minRequiredNonalphanumericCharacters"], "1"));
        _MinRequiredPasswordLength = Convert.ToInt32(
                      GetConfigValue(config["minRequiredPasswordLength"], "6"));
        _EnablePasswordReset = Convert.ToBoolean(
                      GetConfigValue(config["enablePasswordReset"], "true"));
        _PasswordStrengthRegularExpression = Convert.ToString(
                       GetConfigValue(config["passwordStrengthRegularExpression"], ""));

    }
}

iTwitterMembershipUser.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using iTwitter.Models;

namespace iTwitter.Models
{
    public class iTwitterMembershipUser : MembershipUser
    {
        private string _tokenKey;
        private string _tokenSecret;
        private string _twitterUserId;
        private string _login;
        private string _email;
        private int _providerUserKey;

        public string tokenKey
        {
            get { return _tokenKey; }
            set { _tokenKey = value; }
        }

        public string tokenSecret
        {
            get { return _tokenSecret; }
            set { _tokenSecret = value; }
        }

        public string twitterUserId
        {
            get { return _twitterUserId; }
            set { _twitterUserId = value; }
        }

        public string login
        {
            get { return _login; }
            set { _login = value; }
        }

        public string email
        {
            get { return _email; }
            set { _email = value; }
        }

        public int providerUserKey
        {
            get { return _providerUserKey; }
            set { _providerUserKey = value; }
        }

        public iTwitterMembershipUser(object providername,
                                  string login,
                                  int providerUserKey,
                                  string email,
                                  string tokenKey,
                                  string tokenSecret,
                                  string twitterUserId)
        {
            this.tokenKey = tokenKey;
            this.tokenSecret = tokenSecret;
            this.twitterUserId = twitterUserId;
            this.login = login;
            this.providerUserKey = providerUserKey;
            this.email = email;
        }




    }
}

webconfig.cs

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->

<configuration>
  <connectionStrings>
  <add name="iTwitterDB" connectionString="metadata=res://*/Models.iTwitter.csdl|res://*/Models.iTwitter.ssdl|res://*/Models.iTwitter.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\iTwitter.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /></assemblies>
    </compilation>

    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>

    <membership defaultProvider="CustomMembershipProvider">
      <providers>
        <clear />
        <add name="CustomMembershipProvider" type="iTwitterMembershipProvider" connectionStringName="iTwitterDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="iTwitterDB" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="iTwitterDB" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

iTwitterDB :

id int
login varchar(50)
password varchar(100) (MD5 Password Hash)
email varchar(100)
tokenKey varchar(100)
tokenSecret varchar(100)
twitterUserId varchar(100)

UserRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;

namespace iTwitter.Models
{
    public class UserRepository
    {
        public iTwitterMembershipUser CreateUser(string login, string password, string email)
        {
            using (iTwitterDB db = new iTwitterDB())
            {
                Users user = new Users();

                user.login = login;
                user.email = email;
                user.password = password;
                user.tokenKey = "0";
                user.tokenSecret = "0";
                user.twitterUserId = "0";

                db.AddToUsers(user);
                db.SaveChanges();

                return GetUser(login);
            }
        }

        public string GetUserNameByEmail(string email)
        {
            using (iTwitterDB db = new iTwitterDB())
            {
                var result = from u in db.Users where (u.email == email) select u;

                if (result.Count() != 0)
                {
                    var dbuser = result.FirstOrDefault();

                    return dbuser.login;
                }
                else
                {
                    return "";
                }
            }
        }

        public iTwitterMembershipUser GetUser(string login)
        {
            using (iTwitterDB db = new iTwitterDB())
            {
                var result = from u in db.Users where (u.login == login) select u;

                if (result.Count() != 0)
                {
                    var dbuser = result.FirstOrDefault();

                    string _login = dbuser.login;
                    int _providerUserKey = dbuser.id;
                    string _email = dbuser.email;
                    string _tokenKey = dbuser.tokenKey;
                    string _tokenSecret = dbuser.tokenSecret;
                    string _twitterUserId = dbuser.twitterUserId;


                    iTwitterMembershipUser user = new iTwitterMembershipUser("CustomMembershipProvider",
                                                              _login,
                                                              _providerUserKey,
                                                              _email,
                                                              _tokenKey,
                                                              _tokenSecret,
                                                              _twitterUserId);

                    return user;
                }
                else
                {
                    return null;
                }
            }
        }
    }
}

I've some error during compilation :

1) 'iTwitterMembershipProvider' does not implement inherited abstract

member 'System.Web.MembershiProvider.CreateUser(string, string, string, string, string, bool, object, out System.Web.Security.MembershipCreateStatus)'

2) iTwitterMembershipProvider.CreateUser(string,

string, string, string, string, bool, object, out System.Web.Security.MembershipCreateStatus)': no suitable method found to override

3)'iTwitterMembershipProvider.GetUser(string,

bool)': return type must be 'System.Web.Security.MembershipUser' to match overridden member 'System.Web.Security.MembershipProvider.GetUser(string, bool)'

I'm blocked here.

Thank you.

解决方案

Change the return type of CreateUser and GetUser to the base class MembershipUser. When you call these methods you can then cast it to the type iTwitterMembershipUser. For example in CreateUser you change the return statement to

return (iTwitterMembershipUser) GetUser(login);

这篇关于实现自定义和的MembershipUser自定义的MembershipProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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